diff --git a/demo/assets/css/form-builder.css b/demo/assets/css/form-builder.css index cf415bdde..a4049b864 100644 --- a/demo/assets/css/form-builder.css +++ b/demo/assets/css/form-builder.css @@ -653,7 +653,7 @@ textarea.form-control { .frmb .prev-holder { display: block; } .frmb .prev-holder .form-group { - margin-bottom: 0; } + margin: 0; } .frmb .prev-holder .ql-editor { min-height: 125px; } .frmb .prev-holder .form-group > label:not([class='fb-checkbox-label']) { diff --git a/demo/assets/css/form-builder.min.css b/demo/assets/css/form-builder.min.css index db1c4de3e..fb129a3d7 100644 --- a/demo/assets/css/form-builder.min.css +++ b/demo/assets/css/form-builder.min.css @@ -3,4 +3,4 @@ formBuilder - https://formbuilder.online/ Version: 2.1.0 Author: Kevin Chappell */ -@charset "UTF-8";.btn,.btn-group{display:inline-block}.btn-group>.btn,.input-group .form-control{position:relative;float:left}.btn,.btn.active,.btn.btn-active,.btn:active,.form-control{background-image:none}.btn,.btn-group{vertical-align:middle}@font-face{font-family:form-builder-font;src:url(data:application/vnd.ms-fontobject;base64,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YyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=);src:url(data:application/vnd.ms-fontobject;base64,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YyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=) format("embedded-opentype"),url(data:application/octet-stream;base64,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) format("woff2"),url(data:application/font-woff;base64,d09GRgABAAAAABtMAA8AAAAAMVgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABWAAAADsAAABUIIwleU9TLzIAAAGUAAAAQwAAAFY+IFOhY21hcAAAAdgAAACrAAACaLaVjCxjdnQgAAAChAAAABMAAAAgBtX/BGZwZ20AAAKYAAAFkAAAC3CKkZBZZ2FzcAAACCgAAAAIAAAACAAAABBnbHlmAAAIMAAAD7EAABwoxGart2hlYWQAABfkAAAAMwAAADYMmK7haGhlYQAAGBgAAAAdAAAAJAc8A2RobXR4AAAYOAAAAB8AAABIQ97//2xvY2EAABhYAAAAJgAAACZLJkPybWF4cAAAGIAAAAAgAAAAIAKFDJhuYW1lAAAYoAAAAZcAAAM51VzFoXBvc3QAABo4AAAAlgAAANU+0jAQcHJlcAAAGtAAAAB6AAAAhuVBK7x4nGNgZGBg4GIwYLBjYMpJLMlj4HNx8wlhkGJgYYAAkDwymzEnMz2RgQPGA8qxgGkOIGaDiAIAKVkFSAB4nGNgZD7KOIGBlYGBqYppDwMDQw+EZnzAYMjIBBRlYGVmwAoC0lxTGBxeMHzyZQ76n8UQxRzEMA0ozAiSAwAFkwxJAHic7ZHLFYIwEEUvH/8gpAMXLm2FBizIlSVawFvTgL4hU4bDuWEyCSRnLrADOvMwPTRvGiJerjZbveO81Xuenp850tLqolFlXb5fEM6nmmc03nfzc9/y1v/ofdKeg78+ee3CwMiViZniLXv+MWzjJ2cl+loJD0rcS5SENyXhTkk4VeKeo8TdR4k9oMRGUBKuldgSSuJ2GivEe6rYIZorRK1U7JV1qVB+tkwx1wB4nGNgQAMSEMgc9D8LhAESbAPdAHicrVZpd9NGFB15SZyELCULLWphxMRpsEYmbMGACUGyYyBdnK2VoIsUO+m+8Ynf4F/zZNpz6Dd+Wu8bLySQtOdwmpOjd+fN1czbZRJaktgL65GUmy/F1NYmjew8CemGTctRfCg7eyFlisnfBVEQrZbatx2HREQiULWusEQQ+x5ZmmR86FFGy7akV03KLT3pLlvjQb1V334aOsqxO6GkZjN0aD2yJVUYVaJIpj1S0qZlqPorSSu8v8LMV81QwohOImm8GcbQSN4bZ7TKaDW24yiKbLLcKFIkmuFBFHmU1RLn5IoJDMoHzZDyyqcR5cP8iKzYo5xWsEu20/y+L3mndzk/sV9vUbbkQB/Ijuzg7HQlX4RbW2HctJPtKFQRdtd3QmzZ7FT/Zo/ymkYDtysyvdCMYKl8hRArP6HM/iFZLZxP+ZJHo1qykRNB62VO7Es+gdbjiClxzRhZ0N3RCRHU/ZIzDPaYPh788d4plgsTAngcy3pHJZwIEylhczRJ2jByYCVliyqp9a6YOOV1WsRbwn7t2tGXzmjjUHdiPFsPHVs5UcnxaFKnmUyd2knNoykNopR0JnjMrwMoP6JJXm1jNYmVR9M4ZsaERCICLdxLU0EsO7GkKQTNoxm9uRumuXYtWqTJA/Xco/f05la4udNT2g70s0Z/VqdiOtgL0+lp5C/xadrlIkXp+ukZfkziQdYCMpEtNsOUgwdv/Q7Sy9eWHIXXBtju7fMrqH3WRPCkAfsb0B5P1SkJTIWYVYhWQGKta1mWydWsFqnI1HdDmla+rNMEinIcF8e+jHH9XzMzlpgSvt+J07MjLj1z7UsI0xx8m3U9mtepxXIBcWZ5TqdZlu/rNMfyA53mWZ7X6QhLW6ejLD/UaYHlRzodY3lBC5p038GQizDkAg6QMISlA0NYXoIhLBUMYbkIQ1gWYQjLJRjC8mMYwnIZhrC8rGXV1FNJ49qZWAZsQmBijh65zEXlaiq5VEK7aFRqQ54SbpVUFM+qf2WgXjzyhjmwFkiXyJpfMc6Vj0bl+NYVLW8aO1fAsepvH472OfFS1ouFPwX/1dZUJb1izcOTq/Abhp5sJ6o2qXh0TZfPVT26/l9UVFgL9BtIhVgoyrJscGcihI86nYZqoJVDzGzMPLTrdcuan8P9NzFCFlD9+DcUGgvcg05ZSVnt4KzV19uy3DuDcjgTLEkxN/P6VvgiI7PSfpFZyp6PfB5wBYxKZdhqA60VvNknMQ+Z3iTPBHFbUTZI2tjOBIkNHPOAefOdBCZh6qoN5E7hhg34BWFuwXknXKJ6oyyH7kXs8yik/Fun4kT2qGiMwLPZG2Gv70LKb3EMJDT5pX4MVBWhqRg1FdA0Um6oBl/G2bptQsYO9CMqdsOyrOLDxxb3lZJtGYR8pIjVo6Of1l6iTqrcfmYUl++dvgXBIDUxf3vfdHGQyrtayTJHbQNTtxqVU9eaQ+NVh+rmUfW94+wTOWuabronHnpf06rbwcVcLLD2bQ7SUiYX1PVhhQ2iy8WlUOplNEnvuAcYFhjQ71CKjf+r+th8nitVhdFxJN9O1LfR52AM/A/Yf0f1A9D3Y+hyDS7P95oTn2704WyZrqIX66foNzBrrblZugbc0HQD4iFHrY64yg18pwZxeqS5HOkh4GPdFeIBwCaAxeAT3bWM5lMAo/mMOT7A58xh0GQOgy3mMNhmzhrADnMY7DKHwR5zGHzBnHWAL5nDIGQOg4g5DJ4wJwB4yhwGXzGHwdfMYfANc+4DfMscBjFzGCTMYbCv6dYwzC1e0F2gtkFVoANTT1jcw+JQU2XI/o4Xhv29Qcz+wSCm/qjp9pD6Ey8M9WeDmPqLQUz9VdOdIfU3Xhjq7wYx9Q+DmPpMvxjLZQa/jHyXCgeUXWw+5++J9w/bxUC5AAEAAf//AA94nM1ZW3Bbx3nef88dODjAAc7BHcTlEIAIUBKFKyVSACRRIiVSEklTEilZIGuajiuappSkVe2Ydho5TtQX1zOVJ5Oo7bCZzjhOZurIE+fB6kynYzf1eOxMG9vt1C+dvlR+8UObl8IC1H9xoVlJzrjOeCYH599dnt39z579b9+/JC5C7lzgbnGzhCMSsRMn8RAfCZEosUiaZMkkmSZzZJ48RUcnXzGm52sv8ECtHRZdsYGc7E/K/WukP5Psz6zGIeod9EZXyGAsNrhseHTOGdEizhXT7eK0vj5tOQz+AbCo31oiO9JDjt28RHZIdYGjxK5QEAnUUyoVSVIWk/VdkNmZpd5oxruYS+zhYiTijEUWQxAIBE+TYFCdIH19vgXi8zl8R0OTr5i4sD/rLmzH2mesbHDt/kuLaH2rX9raai9+rmV5B2OrW+vS1r78hS0s1C6cOjUz4/er6pN/dPkP/+DrX/vqpfULj37lkZWHlx/6vaXF+vlzp+ZPzZ85PTM3M/fA7PTJE1NHx48cHjt08ECtMlzMDWUzAzvSqWS/lYjHon2RsD/kDwUDPq9peNy6S3WqTrfOLldeCGUhb1ppy8yXkfAu4m35kNLY4LptRqwTTEODLOiGaMUTqaJeqEA+XrSKcdMy47k+4AbAjCeLjI1lQiFlxXULu/NtiifECBjefHswm5QrFeFytbpRqeDdqLaravUmPmnf2ICfBbOBaCLcdIctbMGLG7B3A84EssHXW1dbV+nHzedxGH3FrbV+hPMrldYFTde13jjNTYOMfaXaLavNd6rti/5pI5AJtr4bTiTC9JfID2dXg9nmezc/YWzgPc3d+kW1gj+31tB0nFrRNULQBplNbt7XJvOkTEZIlZwkXyPfq107kKQR99Gd/ZwnQsfjURrxKJG5EHgCPgenyB5l0e9VOdnUJU7gZaFuuESOd9o5DggP9SC43X3zMejrUyc0G+UICc+TcNgRPvrVi2sXvvLI8tL5c6cfOD51eKxa2T86sm/vcLlULOzZPZDuyRwF7u9KvHu5EkIk25NmelsNd9VcsZBCPqJkGt5yPleCbePL3T5ft6/8qS6URqDIipw3gjM6LcnM57zjm5tv3rjxZq+EH7z66gc3bsBPNjc/ePXVN1SxX7JBp/xB+9EHm5tum2xJKmAp2/5lMHz740gmE5kooJEWPij1W8kSjEcyJzc3N/tv3LjRv9l8Y7PBiv4bMLTZ5rbJZrdS2Le5ubrt0WCzyFjRtyOZUrJQSJY6ZQZlS1G2/8j9B/17YpABkqvtbm+gh0gchXED4DABQjmgSyh7ws0RjkPni+2p4ki5wAt+Zhca4Gbsgq5l5Ly+sqSAkCwyU0iIps7UH9Wem0Jtbr6Leoc1zcXzthffb73XehdyMKhrzXc1t1ujOU2nwZbaG4R1Jn7mv1vX4MWHX1OZmnfGERnX/dJ948TjtdUI8EIUFD4AshICUTZBEoXxPhCCoHhB5I74QBrDiRT9Vt0GAuEVga8ThciiIteJaMfx0lncHThNAFRyVFVluedFNIdsl+1MwVyqEMjqcXQESAIWOjaL2HZC2ueROsTduu1nBJdpvvkOo43r9fr1LnFG5fXK6x0TbVRv1mNPw2v12Ab8DAv8qnu/MYZSKpIKxsE5EDoR8CyxU4HaV0LgVtwX2WfZ8bP8KhUcwNsEfskHNuIUbc4lIhJJFyU0NBfRNZe+FACNeGTNsxQ2qGx6qeKWlaVt3x2qneswF9a+BO4LtYPHp2rVcimbScRNw+WamZ6aOz535HB1sjY5sq9UKVdyQ5litphKxgcSA6GgETNjLo9ry7pdETTuLQG0yWQSMDlUR1RGdM6onOmEaHhzpUKq+xSN0xDvfnj30J7U9tJLzed79GFbLXNt3URdDKM6dhQ1XS6n8UHI7XbcM6Qt4kaV/arwWjDT7stlghtu7Ay7W99qDy/OFjdwtGmYree787F4ujMG98zs6oKxTdM7nvcQGUdtOEkeIGfIObJILpNvkGfIFfId7sDkKwrqx5+TUWlEGl05AsNlURxe2Q+ElIqkVEdFKmSKhXp+z+6dfHagPxb2C5TL0sUdh5OH4gci1YDCpcesg9FaqOJTeIHj66lEX9ArCKZHdzoEuyrY67mhXYN8xnC7NF61ZdQ6sRFFtil1tFBpVJbquMZ9e0f21cleUh7eW0brAhBniSjCAgERjiNasuEi/+o3LXIQF0kyWZqZ/W2Xyg12Vzr4hVZqx5X+xfaVlofFtd+x/az9ZWeBI2u/oytcQKz31089NTc3PT01NTExNlarjY4OD1Pynee+/eyVb/3xN5965qlnnt74xpNP9HDgxfXH1x5bvfD7HTTIsOCD584uzM+dmTtz+tT0A9MPzM5MnZw6eeL4xOTE5LGjY+NjiAxrh2qIDUerowgWhkeGES4wtJDP7RnavWvn4N1ocRtycNkk4qTOccHIwvb4pRdSAsJGEwnizOu0f3mEffdQ0rT207zpu2/Vg4YIEs17qc0VuoEkjcS9fPta2LLC3CritttP5PDiVm9f61Hu/OyZmfpkfaY+2FyfnH1pZuZHk5N/MzPzJ2xgrj4zz7omz3fnNN0dX7bRUuHXnJGIMJBphenHYetZt8PTvEoHHR7V49i6oh6PA73aPWUMC4eo9q6A6mleYwC2UiXEtRW3VGwbxE/CGLf6yQ4ySIZIgQyT0Y7fgmIngj0SAjuncvYVovK8uhzwUVPwCuZK0E+9ouhdThi6k3dImuRY8bBMRJa1ZQX4vjCFCA+L/VGLixDBjAh1FoMcorQYBwQIMjlvA46jp2NAqcphNHus+yJ1Dd/Eqfxq71Xetfa7BK+4+unLtLXO2yRNXv0Cr1uonWK6vXOnic57u05WK1vgFdVx59BO1Mj7KaTpN1En2yqJqAM3U/UUkoIXU4I9PZXM6+2Q1w17HlQrpqI6UrlHqFPJbX9DOi90FRXlfimcaNw+82mMa9y8eftXLFfoZSOtq702vF+9fPt/UMDcbEchaR6GKzdfv4lz6KWb1UrznUr3arRLuHi4wVjhJvViVw/HsMzh5x3ZHyAI/XmyogLYeLCtElkDuyjb23vLIZzo4TQHw2mE4TSbothmic2mLBDFpqDHO9jhAWtfnMlCLRWLySjFmBVDEfSFvB7cc5VBPZuC6JFHDpzuFMxsGTc6iXYZgfh+wI336P8X53J6XL8Jv26pn+7q64nwpzZcuX3th2yLWPqHe8ZMr2uGnA3N82OGrsmd/+Ru0fe7px7navMMgyMQhzqvUeIAm53Y6qqT2hFni3ZhSQZRksRZrETpNEHweiwWA8LUqfM5wZ5vc9pk9jGYrkch6mp7OOaJmE/rfMEImO1Ettj1eIAqNgA6eqHmer1Rvx7qt8LXsUFfCCes209ep79srtMX6DxLJVP+1tWwxdJGKwyX/anWJFxuXYXLCF9w08mdn3LH6R2UiEEC6A2eq/n6gAoRrybhegIc5nv4jZgIjk++4kbFSBOBCuv44XSd7f064kYgyxhLeB5msQL+DJP6ZKiWunckWb934EINgVQ85ve5nIqMyxANCcXpK6cxX8O83UpIIJpGPleGUtoHVhEMxPHlUi4K3rdzV/ITsKgKfOufeIfAw26u71Zr6BZ33Dh/67wx4r1iSPkr+dFxKqp86595LGEXf+lWa/dH8P2Ief6jB03zipftA9e2hZfRFnh0GE5yuHbQBvxhWaS8wK8TgQjrEkZrFBBXR3kDnSWUMsBM4ZiiAFGcCtNLOxMjDsLvUlCKSYaAJbR+KPss3dLh/VaWe7m6sdG82Ghcv/nDTz7ZqMBrjUbrF7CXkM5CbtH5zzhj272V1W/Hln9X+9sBh12RBE6CHapNFnmKcRJIHedrulOrE524PLqrjtzcpsddR8xqYMZcR97egM9bR6n7QwF/PZtOWvFoRAoFg6HZrT9CwdOZVH8i1heWgqHgMQzscxjWpzGoT2FIn+gd9WzP/D9HLO8lCoOYKHi2nevcTcJvoM+a4+meHnTOcO66mRflXsb69F31r3r+dPtd7Qygwcr2a6O6sY22X3C50lKrTIzSPbL0kzgZpHt+nkn3c4oM4x18fUICDoEaZ1vTwaYS27IDVJmoy07QFLugrbA0z47WRQWFCquEqSCK1oVxTdFY1ibwvDBLBIHZkoBG18HCY1tcHarO2WTk69TQKyGvlfvyst+fl/6lrJB5ken7c5VX22wVzb72/+frQb4zd/FVV39rxrXZz8VTsdPVz810gV01KxhAE8gO7EglrURfJBAPsnTbr/t75uEWwlkPw5p53cJ6ALAWerlwmuXLiVSh5Mub5bzks9KmVWFwkp0tdmBlpdL810Q6fSidjg/t3bu0b99b0Ud2XHpiYC2KKt0OA8dQZxdzp3N4B2qP1fDml5YuPPn44+w8oB0b3uTs5Glyoja5MFfgRMGHHk9mZ0/jMvo4iQoiL7AjBqAiLNmAEkLnsKJkHjeAkqknn7i4vrqytDh/6uSJY2Nf9+5fsgv+rJBIJUQrkSoXKrRc2g+FNIvVTjAw9uS8PkOUugOK7QHFtF4upQq7YRekd4GI00rlHG5CPofuREyIkmj6WJDvsNpFi/f2e7ZYcz8OPJR7KOBwgTsYU9wgma3veiUwlUSfAaoz+Oieut+hub192IeOnvJUFuSE3wuqFnx0aMmrae5g2GaA5ITnNAk8tl1hTfM/vHvJr2mGPyEZ4FFiYTeoJ3ne73C7qCjaD/2bKnDcv59URd7l1vzAenQXz0uOQ1H4B6dDQ4Y2FxV42u0Osm5BPfEGxdB144QqUtW7rcNxvPlfB5EZJnv+jpzoWyinLNlVy0ZkijIax81HAayw2P04C/P8HOF5dkjIk6n9ec+wJQiBLOD2YIBlG6QbYhbY2am11Uql8cf2ssSOD+lbhhamGg9ex6hmTLtdWM6WjyT7lw9Vfgx2zaAfDbj6gdPEvuaGZhgafak5z2owpWD80IHpB7+NYad7tnmBW8U8hMW28doYj+ridDk4QSRCXVOpiJ5KkhEessWrEzaQZYd8lBAWRHDOVhzRty4MI1C0ypbUJjPfpny5TfgcH+e51evRjWgD6cO3oz/Z1r7eiDbgw40GXhuNbtVoMPd95073f14MGY+QZ2tOC3ghi6pOFACJQx+uos8ZRJPmBH6FgQiRI+0DNwR+aPSCPE9kWZ1AiISRgFIHxWRnZ2c4t/a5xi/U1GI8ZXiKJZ+l4GcK22CtD8Ggp3vmndbREaCU0AmwU3EcIXVhI1oZ9jEJcpuq2NyUbTaZLkq2iUKyuZksQKmfLiYLH0zY5GbnbPrs2f4SFJL4tLSfLrLhnQ66wsZ3OqDw07Nn26MZw4kOjwL5X02/tjsAAAB4nGNgZGBgAOIVR4Ub4vltvjJwM78AijBcOWm6AEb///8/i/kFcxCQy8HABBIFAH6ODi0AeJxjYGRgYA76nwUkX/wHAuYXDEARFCAEALasB6UAAAB4nGN+wcDADMILoDQuHIkpxnQKSGeD2P//AwA/LRESAAAAAAABygK4AxQDhgSMBuIH6giCCOwJcAmyCpgL+gzODSYNeg4UAAAAAQAAABIAiAAWAAAAAAACAI4AngBzAAABWwtwAAAAAHicjZLNSsNAFIVPalW0IKjgenAhijT9ERG6Egp25aZgl0KaTn7KNFMmE6HuXfkgvoE7H8CX0FfxJB1FKaIJk/nOuXd+7iUA9vAGD8vnnGPJHnapllzDJq4cr9G/dlwn3zpeRwPa8Qb9e8fbOMWj4wb28cwdvPoW1RSvjj0cemeOa9jxbhyv0Q8d18kPjtdx4D053qD/4ngbI+/dcQNHtfO+ni9MGidWHPdPRLfduRDjhdC00ixQIihsok0uLkWkMyuV0n6oZ5E2s+a4SNVEmmYZGMq4UIFZ8VeMkTR5qjPR8dsrsYHMpAmsnJQ3yO/irrWRiIyeiSt3tpgbPZWh9RNr571W6/ud0Gdz51jAIEWMBBYCx3RPOHfRRgcXpDEzBDOXWSkyBFB0AhRckVSRnPqSI6LK6EpmKLKPkN9Z5RvOTe5WcA+FCXMM9eeKIXXMmOK+5h/5f2eMKp0zVmrBanzW9Pe6AXVWeUFVyeSrBznueMcu3fL8slpTVSf4I/+sW7CvZWxKJ6TvV921dHto8f2lTx8BfqEwAHicbchbDsIgFEVRTkXsy1cdRwd1C9dCpIUgTersjTb+ub9WtijEVi3+16HADhJ7KBxQokKNBi2OOOGMC67ocBMtLTnoMEXPmaWhzKW2rB9DWE8/9GMKS2wSGRc2V8lp22des3qyZ53Ljykxye+MPGvn5d15VtYZw7MalpzDrCyT4VRFSjQmilbNyzRwkjrElxBvInM0KwAAeJxj8N7BcCIoYiMjY1/kBsadHAwcDMkFGxlYnTYxMDJogRibuZgYOSAsPgYwi81pF9MBoDQnkM3utIvBAcJmZnDZqMLYERixwaEjYiNzistGNRBvF0cDAyOLQ0dySARISSQQbOZhYuTR2sH4v3UDS+9GJgYXAAx2I/QAAA==) format("woff"),url(data:application/x-font-ttf;base64,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BCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=) format("truetype"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtZXRhZGF0YT5Db3B5cmlnaHQgKEMpIDIwMTcgYnkgb3JpZ2luYWwgYXV0aG9ycyBAIGZvbnRlbGxvLmNvbTwvbWV0YWRhdGE+CjxkZWZzPgo8Zm9udCBpZD0iZm9ybS1idWlsZGVyLWZvbnQiIGhvcml6LWFkdi14PSIxMDAwIiA+Cjxmb250LWZhY2UgZm9udC1mYW1pbHk9ImZvcm0tYnVpbGRlci1mb250IiBmb250LXdlaWdodD0iNDAwIiBmb250LXN0cmV0Y2g9Im5vcm1hbCIgdW5pdHMtcGVyLWVtPSIxMDAwIiBhc2NlbnQ9Ijg1MCIgZGVzY2VudD0iLTE1MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjEwMDAiIC8+CjxnbHlwaCBnbHlwaC1uYW1lPSJhdXRvY29tcGxldGUiIHVuaWNvZGU9IiYjeGU4MDA7IiBkPSJNMzc1IDUzOGg2M3YtNjNoLTYzdjYzeiBtLTEyNSA2MmgtNjJ2LTYyaDYydjYyeiBtMTI1IDBoLTYydi02Mmg2MnY2MnogbS0yNTAtNjJ2LTYzaDYzdjYzaC02M3ogbTYzLTEyNWg2MnY2MmgtNjJ2LTYyeiBtMTI1IDBoNjJ2NjJoLTYydi02MnogbS02MyAxMjV2LTYzaDYzdjYzaC02M3ogbS0xMjUtNTYzaDYzdjYzaC02M3YtNjN6IG0xMjUgMGg2M3Y2M2gtNjN2LTYzeiBtMTI1IDBoNjN2NjNoLTYzdi02M3ogbTE4OCA2M2gtNjN2LTYzaDYzdjYzeiBtNDM3IDU5M3YtMjUwYzAtNTAtNDQtOTMtOTQtOTNoLTMxdi0xODgtMTg4YzAtMzctMjUtNjItNjItNjJoLTc1MGMtMzggMC02MyAyNS02MyA2MnY3MTljMCA1MCA0NCA5NCA5NCA5NGgxODcgMjE5djMxIDMyaC02Mi02M3YzMSAzMWgxNTYgMTU3di0zMS0zMWgtNjMtNjJ2LTMyLTMxaDE4NyAxNTZjNTAgMCA5NC00NCA5NC05NHogbS0xODctNTMxaC0zNzUtMzc1di0xODhoNzUwdjE4OHogbS02MjUgNjN2NjJoLTYzdi02Mmg2M3ogbTEyNSAwdjYyaC02M3YtNjJoNjN6IG02MjUgNDY4YzAgMTktMTMgMzItMzIgMzJoLTM0M3YtMTU3LTE1NmgtMzItMzF2MzEgMzJoLTYydjYyaDYydjMxIDMyaC02MnY2Mmg2MnYzMSAzMmgtNDA2Yy0xOSAwLTMxLTEzLTMxLTMydi0yNTBjMC0xOCAxMi0zMSAzMS0zMWg0MDZ2LTYyaC0xMjV2LTMyLTMxaDE1NiAxNTd2MzEgMzJoLTEyNXY2MmgzNDNjMTkgMCAzMiAxMyAzMiAzMXYyNTB6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJkYXRlIiB1bmljb2RlPSImI3hlODAxOyIgZD0iTTcxLTc5aDE2MXYxNjFoLTE2MXYtMTYxeiBtMTk3IDBoMTc4djE2MWgtMTc4di0xNjF6IG0tMTk3IDE5N2gxNjF2MTc4aC0xNjF2LTE3OHogbTE5NyAwaDE3OHYxNzhoLTE3OHYtMTc4eiBtLTE5NyAyMTRoMTYxdjE2MWgtMTYxdi0xNjF6IG00MTEtNDExaDE3OXYxNjFoLTE3OXYtMTYxeiBtLTIxNCA0MTFoMTc4djE2MWgtMTc4di0xNjF6IG00MjgtNDExaDE2MXYxNjFoLTE2MXYtMTYxeiBtLTIxNCAxOTdoMTc5djE3OGgtMTc5di0xNzh6IG0tMTk2IDQ4MnYxNjFxMCA3LTYgMTJ0LTEyIDZoLTM2cS03IDAtMTItNnQtNi0xMnYtMTYxcTAtNyA2LTEzdDEyLTVoMzZxNyAwIDEyIDV0NiAxM3ogbTQxMC00ODJoMTYxdjE3OGgtMTYxdi0xNzh6IG0tMjE0IDIxNGgxNzl2MTYxaC0xNzl2LTE2MXogbTIxNCAwaDE2MXYxNjFoLTE2MXYtMTYxeiBtMTggMjY4djE2MXEwIDctNSAxMnQtMTMgNmgtMzVxLTcgMC0xMy02dC01LTEydi0xNjFxMC03IDUtMTN0MTMtNWgzNXE4IDAgMTMgNXQ1IDEzeiBtMjE1IDM2di03MTVxMC0yOS0yMi01MHQtNTAtMjFoLTc4NnEtMjkgMC01MCAyMXQtMjEgNTB2NzE1cTAgMjkgMjEgNTB0NTAgMjFoNzJ2NTRxMCAzNyAyNiA2M3Q2MyAyNmgzNnEzNyAwIDYzLTI2dDI2LTYzdi01NGgyMTR2NTRxMCAzNyAyNyA2M3Q2MyAyNmgzNXEzNyAwIDY0LTI2dDI2LTYzdi01NGg3MXEyOSAwIDUwLTIxdDIyLTUweiIgaG9yaXotYWR2LXg9IjkyOC42IiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImNoZWNrYm94IiB1bmljb2RlPSImI3hlODAyOyIgZD0iTTg0NCA1Mzh2LTUwMGMwLTUxLTQ0LTk0LTk0LTk0aC01NjJjLTUwIDAtOTQgNDMtOTQgOTR2NTYyYzAgNTAgNDQgOTQgOTQgOTRoNTYyYzQ0IDAgODEtMzEgOTQtNzVsMTUwIDg3LTE1MC0xNjh6IG0tNjMtNzVsLTMwMC0zNjMtMzA2IDQwNiAzMDYtMTAwIDMwMCAxODJ2MTJjMCAxOS0xMiAzMS0zMSAzMWgtNTYyYy0xOSAwLTMyLTEyLTMyLTMxdi01NjJjMC0xOSAxMy0zMiAzMi0zMmg1NjJjMTkgMCAzMSAxMyAzMSAzMnY0MjV6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJjaGVja2JveC1ncm91cCIgdW5pY29kZT0iJiN4ZTgwMzsiIGQ9Ik0wIDc4OGgxMDAwdjYyaC0xMDAwdi02MnogbTAtMTI1aDEwMDB2NjJoLTEwMDB2LTYyeiBtMzc1LTEyNXYtNjNoNTYzdjYzaC01NjN6IG01NjMtNTYzdjYzaC01NjN2LTYzaDU2M3ogbS01NjMgMjUwaDU2M3Y2M2gtNTYzdi02M3ogbS0xMjUtMTI1bC0xNTYtOTQtOTQgMzIgOTQtMTI2IDE1NiAxODh6IG0wIDI1MGwtMTU2LTk0LTk0IDMyIDk0LTEyNSAxNTYgMTg3eiBtMCAyNTBsLTE1Ni05NC05NCAzMiA5NC0xMjUgMTU2IDE4N3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InJhZGlvLWdyb3VwIiB1bmljb2RlPSImI3hlODA0OyIgZD0iTTAgNzg4aDEwMDB2NjJoLTEwMDB2LTYyeiBtMC0xMjVoMTAwMHY2MmgtMTAwMHYtNjJ6IG0zMTMtMTg4aDYyNXY2M2gtNjI1di02M3ogbTYyNS0xODdoLTYyNXYtNjNoNjI1djYzeiBtMC0zMTN2NjNoLTYyNXYtNjNoNjI1eiBtLTg0NCA0MzhjLTUwIDAtOTQgNDMtOTQgOTNzNDQgOTQgOTQgOTQgOTQtNDQgOTQtOTQtNDQtOTMtOTQtOTN6IG0wIDEyNWMtMTkgMC0zMS0xMy0zMS0zMnMxMi0zMSAzMS0zMSAzMSAxMyAzMSAzMS0xMiAzMi0zMSAzMnogbTAtMzgyYy01MCAwLTk0IDQ0LTk0IDk0czQ0IDk0IDk0IDk0IDk0LTM4IDk0LTk0LTQ0LTk0LTk0LTk0eiBtMCAxMjVjLTE5IDAtMzEtMTItMzEtMzFzMTItMzEgMzEtMzEgMzEgMTkgMzEgMzEtMTIgMzEtMzEgMzF6IG0wLTM2OWMtNTAgMC05NCA0NC05NCA5NHM0NCA5NCA5NCA5NCA5NC00NCA5NC05NC00NC05NC05NC05NHogbTAgMTI2Yy0xOSAwLTMxLTEzLTMxLTMyczEyLTMxIDMxLTMxIDMxIDEyIDMxIDMxLTEyIDMyLTMxIDMyeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0icmljaC10ZXh0IiB1bmljb2RlPSImI3hlODA1OyIgZD0iTTkzOCA3ODhoLTg3NWMtMzggMC02My0yNS02My02M3YtNzUwYzAtMzggMjUtNjMgNjMtNjNoODc1YzM3IDAgNjIgMjUgNjIgNjN2NzUwYzAgMzgtMjUgNjMtNjIgNjN6IG0tODc1LTEzMmg1MHYtMThoLTUwdjE4eiBtMC0zMWg1MHYtMTloLTUwdjE5eiBtODc1LTY1MGgtODc1djU1Nmg4NzV2LTU1NnogbTAgNTY5aC04NzV2MTloODc1di0xOXogbTAgMzFoLTg3NXYxOWg1MHYtMTNoOTN2MTNoODJ2LTEzaDg3djEzaDgxdi0xM2g5NHYxM2g3NXYtMTNoOTR2MTNoODF2LTEzaDk0djEzaDQ0di0xOXogbS02NTcgNTB2LTE5aC03NXYxOWg3NXogbS03NSAxM3YxOGg4MnYtMThoLTgyeiBtMjUwLTEzdi0xOWgtODF2MTloODF6IG0tODEgMTN2MThoODF2LTE4aC04MXogbTI1MC0xM3YtMTloLTc1djE5aDc1eiBtLTc1IDEzdjE4aDc1di0xOGgtNzV6IG0yNTAtMTN2LTE5aC04MXYxOWg4MXogbS04MSAxM3YxOGg4MXYtMThoLTgxeiBtMjE5LTMyaC01MHYxOWg1MHYtMTl6IG0wIDMyaC01MHYxOGg1MHYtMTh6IG0wIDMxaC01MHY2aC05NHYtMTJoLTgxdjEyaC04OHYtMTJoLTc1djEyaC05NHYtMTJoLTgxdjEyaC05NHYtMTJoLTc1djEyaC05M3YtMTJoLTUwdjI1aDg3NXYtMTl6IG0wIDMxaC04NzV2MTloODc1di0xOXogbS03NTAtNjAwdjYzaDYyNXYtNjNoLTYyNXogbTYyNSAxMjVoLTYyNXY2M2g2MjV2LTYzeiBtLTEyNSAxMjVoLTUwMHY2M2g1MDB2LTYzeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0ic2VsZWN0IiB1bmljb2RlPSImI3hlODA2OyIgZD0iTTAgODUwdi04NzVoMGMwLTM4IDI1LTYzIDYzLTYzaDYyNWMzNyAwIDYyIDI1IDYyIDYzaDB2NTYzaDI1MHYzMTJoLTEwMDB6IG02My02Mmg2MjV2LTE4OGgtNjI1djE4OHogbTAtMzc1aDYyNXYtMTg4aC02MjV2MTg4eiBtMC00Mzh2MTg4aDYyNXYtMTg4aC02MjV6IG04NzUgNjI1aC0xODh2MTg4aDE4OHYtMTg4eiBtLTgxMyAxMjVoNjN2LTYyaC02M3Y2MnogbTAtNjI1aDYzdi02MmgtNjN2NjJ6IG0xMjUgMGg2M3YtNjJoLTYzdjYyeiBtMTI1IDBoNjN2LTYyaC02M3Y2MnogbTE4OCAwdi02MmgtNjN2NjJoNjN6IG0tNDM4IDI1MGg2M3YtNjJoLTYzdjYyeiBtMTI1IDBoNjN2LTYyaC02M3Y2MnogbTEyNSAwaDYzdi02MmgtNjN2NjJ6IG00NjkgMzA2bC02MyA2OWgxMTlsLTU2LTY5eiBtLTcxOS0xODF2NjNoNjN2LTYzaC02M2wwIDB6IG0xMjUgMHY2M2g2M3YtNjNoLTYzbDAgMHoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InRleHRhcmVhIiB1bmljb2RlPSImI3hlODA3OyIgZD0iTTE4OCAxNjN2NjJoNTAwdi02MmgtNTAwbDAgMHogbTAgMjUwaDYyNXY2MmgtNjI1di02MmwwIDB6IG0wLTYzdi02Mmg2MjV2NjJoLTYyNWwwIDB6IG02MjUgMjUwaC02MjV2LTYyaDYyNXY2MmwwIDB6IG0xODctNjI1djc1MGMwIDM4LTI1IDYzLTYyIDYzaC04NzVjLTM4IDAtNjMtMjUtNjMtNjN2LTc1MGMwLTM4IDI1LTYzIDYzLTYzaDg3NWMzNyAwIDYyIDI1IDYyIDYzeiBtLTYyIDc1MHYtNzUwaC04NzV2NzUwaDg3NXoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InRleHQiIHVuaWNvZGU9IiYjeGU4MDg7IiBkPSJNOTM4IDYwMGgtNjU3djYzaDk0djYyaC05NC02Mi05NHYtNjJoOTR2LTYzaC0xNTZjLTM4IDAtNjMtMzEtNjMtNjJ2LTM3NWMwLTM4IDI1LTYzIDYzLTYzaDE1NnYtNjJoLTk0di02M2gyNTB2NjNoLTk0djYyaDY1N2MzNyAwIDYyIDI1IDYyIDYzdjM3NWMwIDMxLTI1IDYyLTYyIDYyeiBtLTg3NS00Mzd2Mzc1aDE1NnYtMzc1aC0xNTZ6IG04NzUgMGgtNjU3djM3NWg2NTd2LTM3NXoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InBlbmNpbCIgdW5pY29kZT0iJiN4ZTgwOTsiIGQ9Ik0yMDMtN2w1MCA1MS0xMzEgMTMxLTUxLTUxdi02MGg3MnYtNzFoNjB6IG0yOTEgNTE4cTAgMTItMTIgMTItNSAwLTktNGwtMzAzLTMwMnEtNC00LTQtMTAgMC0xMiAxMy0xMiA1IDAgOSA0bDMwMyAzMDJxMyA0IDMgMTB6IG0tMzAgMTA3bDIzMi0yMzItNDY0LTQ2NWgtMjMydjIzM3ogbTM4MS01NHEwLTI5LTIwLTUwbC05My05My0yMzIgMjMzIDkzIDkycTIwIDIxIDUwIDIxIDI5IDAgNTEtMjFsMTMxLTEzMXEyMC0yMiAyMC01MXoiIGhvcml6LWFkdi14PSI4NTcuMSIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJmaWxlIiB1bmljb2RlPSImI3hlODBhOyIgZD0iTTQ2OSAxNjNoLTQ2OXYtMjUxaDkzOHYyNTFoLTQ2OXogbTQwNi0xMjVoLTEyNXY2MmgxMjV2LTYyeiBtLTY1NiA1MDBsMjUwIDI1MCAyNTAtMjUwaC0xNTZ2LTMxM2gtMTg4djMxM3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImhpZGRlbiIgdW5pY29kZT0iJiN4ZTgwYjsiIGQ9Ik02MyA1MzhsNjIgMCAwIDYyLTYyIDB6IG0xMjUgMGw2MiAwIDAgNjItNjIgMHogbTEyNSAwbDYyIDAgMCA2Mi02MiAweiBtMTI1IDBsNjIgMCAwIDYyLTYyIDB6IG0xMjUgMGw2MiAwIDAgNjItNjIgMHogbTEyNSAwbDYyIDAgMCA2Mi02MiAweiBtMTI1IDBsNjIgMCAwIDYyLTYyIDB6IG0tODEzLTYzbDYzIDAgMCA2My02MyAweiBtOTM4LTYybDYyIDAgMCA2Mi02MiAweiBtLTkzOC02M2w2MyAwIDAgNjMtNjMgMHogbTkzOC02Mmw2MiAwIDAgNjItNjIgMHogbS05MzgtNjNsNjMgMCAwIDYzLTYzIDB6IG05MzgtNjJsNjIgMCAwIDYyLTYyIDB6IG0tODEzLTYzbDYzIDAgMCA2My02MyAweiBtMTI1IDBsNjMgMCAwIDYzLTYzIDB6IG0xMjUgMGw2MyAwIDAgNjMtNjMgMHogbTEyNSAwbDYzIDAgMCA2My02MyAweiBtMTI1IDBsNjMgMCAwIDYzLTYzIDB6IG0xMjUgMGw2MyAwIDAgNjMtNjMgMHogbTEyNSAwbDYzIDAgMCA2My02MyAweiBtNjMgNDM4bDYyIDAgMCA2Mi02MiAweiBtLTkzOC00MzhsNjMgMCAwIDYzLTYzIDB6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJidXR0b24iIHVuaWNvZGU9IiYjeGU4MGQ7IiBkPSJNNjIgNTM4bDg3NSAwIDAgNjItODc1IDB6IG0tNjItMzc1bDYzIDAgMCAzNzUtNjMgMHogbTYzLTYzbDg3NSAwIDAgNjMtODc1IDB6IG04NzUgNjNsNjIgMCAwIDM3NS02MiAweiBtLTU1MiAyODBxLTM0IDAtNTQtMjUtMTktMjUtMTktNjggMC00MyAxOS02OCAyMC0yNSA1NC0yNSAzMyAwIDUzIDI1IDE5IDI1IDE5IDY4IDAgNDMtMTkgNjgtMjAgMjUtNTMgMjV6IG0wIDI1cTQ4IDAgNzYtMzIgMjktMzIgMjktODYgMC01NC0yOS04Ni0yOC0zMi03Ni0zMi00OCAwLTc3IDMyLTI5IDMyLTI5IDg2IDAgNTQgMjkgODYgMjkgMzIgNzcgMzJ6IG0xNTMtNGwzMSAwIDAtOTYgMTAyIDk2IDQwIDAtMTEzLTEwNiAxMjEtMTIyLTQxIDAtMTA5IDExMCAwLTExMC0zMSAwIDAgMjI4eiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0iaGVhZGVyIiB1bmljb2RlPSImI3hlODBmOyIgZD0iTTkzOS03OXEtMjUgMC03NCAydC03NSAycS0yNCAwLTczLTJ0LTc0LTJxLTEzIDAtMjEgMTJ0LTcgMjVxMCAxOCA5IDI2dDIyIDkgMjkgNCAyNSA5cTE4IDExIDE4IDc4bDAgMjE4cTAgMTItMSAxNy03IDMtMjggM2gtMzc2cS0yMiAwLTI5LTMgMC01IDAtMTdsLTEtMjA3cTAtNzkgMjEtOTEgOS02IDI2LTh0MzItMiAyNS04IDExLTI2cTAtMTQtNi0yNnQtMjEtMTNxLTI2IDAtNzggMnQtNzcgMnEtMjQgMC03MS0ydC03MS0ycS0xMyAwLTIwIDEydC03IDI1cTAgMTcgOSAyNXQyMCAxMCAyNiA0IDI0IDlxMTggMTMgMTggODBsLTEgMzF2NDU0cTAgMiAxIDE1dDAgMjAtMSAyMS0yIDI0LTQgMjAtNiAxOC05IDEwcS04IDUtMjUgN3QtMjkgMS0yMyA3LTEwIDI2cTAgMTQgNiAyNnQyMCAxM3EyNiAwIDc4LTJ0NzctMnEyMyAwIDcxIDJ0NzAgMnExNCAwIDIxLTEzdDctMjZxMC0xNy05LTI1dC0yMi04LTI3LTItMjQtN3EtMjAtMTItMjAtOTBsMS0xNzhxMC0xMiAwLTE4IDctMiAyMi0yaDM5MHExNCAwIDIxIDIgMSA2IDEgMThsMCAxNzhxMCA3OC0xOSA5MC0xMCA2LTMzIDd0LTM3IDctMTQgMjhxMCAxNCA3IDI2dDIxIDEzcTI0IDAgNzQtMnQ3My0ycTI0IDAgNzIgMnQ3MiAycTE0IDAgMjEtMTN0Ny0yNnEwLTE3LTEwLTI1dC0yMi04LTI5LTItMjQtN3EtMjAtMTMtMjAtOTBsMS01MjZxMC02NiAxOS03OCA5LTYgMjUtOHQzMC0yIDIzLTkgMTAtMjVxMC0xNC02LTI2dC0yMC0xM3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InBhcmFncmFwaCIgdW5pY29kZT0iJiN4ZTgxMDsiIGQ9Ik03MTMgNzQ1di00MXEwLTE2LTEwLTM0dC0yNC0xOHEtMjggMC0zMC0xLTE0LTMtMTgtMTctMS02LTEtMzZ2LTY0M3EwLTE0LTExLTI0dC0yNC0xMGgtNjBxLTE0IDAtMjQgMTB0LTEwIDI0djY4MGgtODB2LTY4MHEwLTE0LTktMjR0LTI1LTEwaC02MHEtMTQgMC0yNCAxMHQtMTAgMjR2Mjc3cS04MiA3LTEzNyAzMy03MCAzMy0xMDcgMTAwLTM2IDY1LTM2IDE0NSAwIDkyIDUwIDE1OSA0OSA2NiAxMTYgODkgNjIgMjEgMjMzIDIxaDI2N3ExNCAwIDI0LTEwdDEwLTI0eiIgaG9yaXotYWR2LXg9IjcxNC4zIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9Im51bWJlciIgdW5pY29kZT0iJiN4ZTgxMTsiIGQ9Ik04NzUgNDc1djEyNWgtMTU2bDMxIDI1MGgtMTI1bC0zMS0yNTBoLTI1MGwzMSAyNTBoLTEyNWwtMzEtMjUwaC0yMTl2LTEyNWgyMDNsLTMxLTI1MGgtMTcydi0xMjVoMTU2bC0zMS0yNTBoMTI1bDMxIDI1MGgyNTBsLTMxLTI1MGgxMjVsMzEgMjUwaDIxOXYxMjVoLTIwM2wzMSAyNTBoMTcyeiBtLTMyOC0yNTBoLTI1MGwzMSAyNTBoMjUwbC0zMS0yNTB6IiBob3Jpei1hZHYteD0iODc1IiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImNvcHkiIHVuaWNvZGU9IiYjeGYyNGQ7IiBkPSJNOTI5LTYxdjYwN3EwIDgtNiAxM3QtMTIgNWgtNjA3cS04IDAtMTMtNXQtNS0xM3YtNjA3cTAtNyA1LTEydDEzLTZoNjA3cTcgMCAxMiA2dDYgMTJ6IG03MSA2MDd2LTYwN3EwLTM3LTI2LTYzdC02My0yNmgtNjA3cS0zNyAwLTYzIDI2dC0yNyA2M3Y2MDdxMCAzNyAyNyA2NHQ2MyAyNmg2MDdxMzcgMCA2My0yNnQyNi02NHogbS0yMTQgMjE1di05MGgtNzJ2OTBxMCA3LTUgMTJ0LTEzIDZoLTYwN3EtNyAwLTEyLTZ0LTYtMTJ2LTYwN3EwLTggNi0xM3QxMi01aDkwdi03MmgtOTBxLTM2IDAtNjMgMjd0LTI2IDYzdjYwN3EwIDM3IDI2IDYzdDYzIDI2aDYwN3EzNyAwIDY0LTI2dDI2LTYzeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+CjwvZm9udD4KPC9kZWZzPgo8L3N2Zz4=) format("svg");font-weight:400;font-style:normal}[class*=" icon-"]:before,[class^=icon-]:before{font-family:form-builder-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-autocomplete:before{content:'\e800'}.icon-date:before{content:'\e801'}.icon-checkbox:before{content:'\e802'}.icon-checkbox-group:before{content:'\e803'}.icon-radio-group:before{content:'\e804'}.icon-rich-text:before{content:'\e805'}.icon-select:before{content:'\e806'}.icon-textarea:before{content:'\e807'}.icon-text:before{content:'\e808'}.icon-pencil:before{content:'\e809'}.icon-file:before{content:'\e80a'}.icon-hidden:before{content:'\e80b'}.icon-button:before{content:'\e80d'}.icon-header:before{content:'\e80f'}.icon-paragraph:before{content:'\e810'}.icon-number:before{content:'\e811'}.icon-copy:before{content:'\f24d'}*{box-sizing:border-box}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.btn,.frmb .prev-holder label,.frmb .sortable-options-wrap label,.frmb li.disabled-field label,.frmb li.no-fields label{font-weight:400}textarea{overflow:auto}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}.btn-group{position:relative}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-group .input-group .form-control:last-child,.btn-group .input-group-addon:last-child,.btn-group .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.btn-group .input-group-btn:first-child>.btn:not(:first-child),.btn-group .input-group-btn:last-child>.btn,.btn-group .input-group-btn:last-child>.btn-group>.btn,.btn-group .input-group-btn:last-child>.dropdown-toggle,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn{padding:6px 12px;margin-bottom:0;font-size:14px;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:4px}.btn.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn.btn-sm,.btn.btn-xs{font-size:12px;line-height:1.5;border-radius:3px}.btn.btn-sm{padding:5px 10px}.btn.btn-xs{padding:1px 5px}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.input-group{position:relative;display:table;border-collapse:separate}.form-control,output{display:block;font-size:14px;line-height:1.42857143}.input-group .form-control{z-index:2;width:100%;margin-bottom:0}textarea.form-control{height:auto}.form-control{height:34px;width:100%;padding:6px 12px;border-radius:4px}.form-control:focus{outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-group{margin-left:0;margin-bottom:15px}.pull-right{float:right}.pull-left{float:left}.fb-required,.required-asterisk{color:#c10000}.fb-checkbox-inline,.fb-radio-inline{display:inline-block;padding-left:20px;vertical-align:middle}.fb-checkbox-inline:first-child,.fb-radio-inline:first-child{padding-left:0}.fb-autocomplete-list{background-color:#fff;display:none;list-style:none;padding:0;border:1px solid #ccc;border-width:0 1px 1px;position:absolute;z-index:20;max-height:200px;overflow-y:auto}.fb-autocomplete-list li{display:none;cursor:default;padding:5px;margin:0;-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.fb-autocomplete-list li.active-option,.fb-autocomplete-list li:hover{background-color:rgba(0,0,0,.075)}@-webkit-keyframes PLACEHOLDER{0%{height:1px}100%{height:15px}}@keyframes PLACEHOLDER{0%{height:1px}100%{height:15px}}.cb-wrap{float:right;width:26%;-webkit-transition:-webkit-transform 250ms;transition:-webkit-transform 250ms;transition:transform 250ms;transition:transform 250ms,-webkit-transform 250ms}.cb-wrap.pull-left .form-actions{float:left}.cb-wrap h4{margin-top:0;color:#666}.cb-wrap .save:hover{color:#08fe00}@media (max-width:481px){.cb-wrap{width:64px}.cb-wrap h4{display:none}}.frmb-control{margin:0;padding:1px;border-radius:5px}.frmb-control li{cursor:move;list-style:none;margin:0 0 -1px;padding:10px;text-align:left;background:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;box-shadow:inset 0 0 0 1px #c5c5c5}.frmb-control li .control-icon{width:16px;height:auto;margin-right:10px;margin-left:.2em;display:inline-block}.frmb-control li .control-icon img,.frmb-control li .control-icon svg{max-width:100%;height:auto}.frmb-control li:first-child{border-radius:5px 5px 0 0;margin-top:0}.frmb-control li:last-child{border-radius:0 0 5px 5px}.frmb-control li::before{margin-right:10px;font-size:16px}.frmb-control li:hover{background-color:#f2f2f2}.frmb-control li.ui-sortable-helper{border-radius:5px;-webkit-transition:box-shadow 250ms;transition:box-shadow 250ms;box-shadow:2px 2px 6px 0 #666;border:1px solid #fff}.frmb-control li.ui-state-highlight{width:0;overflow:hidden;padding:0;margin:0;border:0}.frmb-control li.moving{opacity:.6}.frmb-control li.fb-separator{background-color:transparent;box-shadow:none;padding:0;cursor:default}.frmb-control li.fb-separator hr{margin:10px 0}@media (max-width:481px){.frmb-control li::before{font-size:30px}.frmb-control li span{display:none}}.frmb-control.sort-enabled li.ui-state-highlight{box-shadow:none;height:0;width:100%;background:-webkit-radial-gradient(center ellipse,#545454 0,transparent 75%);background:radial-gradient(ellipse at center,#545454 0,transparent 75%);border:0;-webkit-clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);visibility:visible;overflow:hidden;margin:1px 0 3px;-webkit-animation:PLACEHOLDER 250ms forwards;animation:PLACEHOLDER 250ms forwards}.frmb-control .input-set-0{border-radius:5px 5px 0 0}.fb-mobile .form-actions{width:100%}.fb-mobile .form-actions button{width:100%;font-size:.85em!important;display:block!important;border-radius:0!important;margin-top:-1px;margin-left:0!important}.fb-mobile .form-actions button:first-child{border-radius:5px 5px 0 0!important;margin-top:0!important;border-bottom:0 none}.fb-mobile .form-actions button:last-child{border-radius:0 0 5px 5px!important}.form-actions{float:right;margin-top:5px}.form-actions button{border:0}.empty .frmb{border:3px dashed #ccc;margin-right:5px;background-color:rgba(255,255,255,.25)}.stage-wrap{position:relative;float:left;width:74%}.stage-wrap.pull-right .frmb{margin:0 0 0 6px}@media (max-width:481px){.stage-wrap{width:calc(100% - 64px)}}.stage-wrap.empty::after{content:attr(data-content);position:absolute;text-align:center;top:50%;left:0;width:100%;margin-top:-1em}.frmb .prev-holder input[type=number],.frmb .prev-holder input[type=date]{width:auto}.frmb{list-style-type:none;min-height:200px;margin:0 6px 0 0;padding:0;-webkit-transition:background-color .5s ease-in-out;transition:background-color .5s ease-in-out}.frmb .fb-required{color:#c10000}.frmb.removing{overflow:hidden}.frmb>li:hover{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 0 8px rgba(102,175,233,.6)}.frmb>li:hover .field-actions{opacity:1}.frmb>li:hover li :hover{background:#fefefe}.frmb li{position:relative;padding:6px;clear:both;margin-left:0;margin-bottom:3px;background-color:#fff;-webkit-transition:background-color 250ms ease-in-out,margin-top .4s;transition:background-color 250ms ease-in-out,margin-top .4s}.frmb li.hidden-field{background-color:rgba(255,255,255,.6)}.frmb li:first-child{border-top-right-radius:5px;border-top-left-radius:5px}.frmb li:first-child .field-actions .btn:last-child{border-radius:0 5px 0 0}.frmb li:last-child{border-bottom-right-radius:5px;border-bottom-left-radius:5px}@keyframes PLACEHOLDER{0%{height:0}100%{height:15px}}.frmb li.frmb-placeholder,.frmb li.ui-state-highlight{height:0;padding:0;background:-webkit-radial-gradient(center ellipse,#545454 0,transparent 75%);background:radial-gradient(ellipse at center,#545454 0,transparent 75%);border:0;-webkit-clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);visibility:visible;overflow:hidden;margin-bottom:3px;-webkit-animation:PLACEHOLDER 250ms forwards;animation:PLACEHOLDER 250ms forwards}.frmb li.moving,.frmb li.ui-sortable-helper{-webkit-transition:box-shadow .5s ease-in-out;transition:box-shadow .5s ease-in-out;box-shadow:2px 2px 6px 0 #666;border:1px solid #fff;border-radius:5px}.frmb li.disabled-field{z-index:1;position:relative;overflow:visible}.frmb li.deleting,.frmb-tt{z-index:20;pointer-events:none}.frmb li.disabled-field:hover .frmb-tt{display:inline-block}.frmb li.disabled-field [type=checkbox]{float:left;margin-right:10px}.frmb li.disabled-field h2{border-bottom:0 none}.frmb li.disabled-field label{font-size:12px;color:#666}.frmb li.disabled-field .prev-holder{cursor:default;line-height:28px;padding-left:5px}.frmb li .close-field{position:absolute;color:#666;left:50%;bottom:6px;background:#fff;border-top:1px solid #c5c5c5;border-left:1px solid #c5c5c5;border-right:1px solid #c5c5c5;-webkit-transform:translateX(-50%);transform:translateX(-50%);padding:0 5px;border-top-right-radius:3px;border-top-left-radius:3px;cursor:pointer;-webkit-transition:background-color 250ms ease-in-out;transition:background-color 250ms ease-in-out}.frmb li .close-field:hover{text-decoration:none}.frmb li.button-field .prev-holder,.frmb li.button-field address,.frmb li.button-field blockquote,.frmb li.button-field canvas,.frmb li.button-field h1,.frmb li.button-field h2,.frmb li.button-field h3,.frmb li.button-field output,.frmb li.button-field p,.frmb li.header-field .prev-holder,.frmb li.header-field address,.frmb li.header-field blockquote,.frmb li.header-field canvas,.frmb li.header-field h1,.frmb li.header-field h2,.frmb li.header-field h3,.frmb li.header-field output,.frmb li.header-field p,.frmb li.paragraph-field .prev-holder,.frmb li.paragraph-field address,.frmb li.paragraph-field blockquote,.frmb li.paragraph-field canvas,.frmb li.paragraph-field h1,.frmb li.paragraph-field h2,.frmb li.paragraph-field h3,.frmb li.paragraph-field output,.frmb li.paragraph-field p{margin:0}.frmb li.button-field .field-label,.frmb li.header-field .field-label,.frmb li.paragraph-field .field-label{display:none}.frmb li.button-field.editing .field-label,.frmb li.header-field.editing .field-label,.frmb li.paragraph-field.editing .field-label{display:block}.frmb .frm-holder,.frmb li.checkbox-field .field-label{display:none}.frmb li.paragraph-field .fld-label{min-height:150px}.frmb li.delete:hover,.frmb li.delete:hover .close-field,.frmb li.deleting,.frmb li.deleting .close-field,.frmb li:hover li.delete:hover,.frmb li:hover li.delete:hover .close-field{background-color:#fdd}.frmb.disabled-field{padding:0 5px}.frmb.disabled-field :hover{border-color:transparent}.frmb.disabled-field .form-element{float:none;margin-bottom:10px;overflow:visible;padding:5px 0;position:relative}.frmb .tooltip{left:20px}.frmb .prev-holder{display:block}.frmb .prev-holder .form-group{margin-bottom:0}.frmb .prev-holder .ql-editor{min-height:125px}.frmb .prev-holder .form-group>label:not([class=fb-checkbox-label]){display:none}.frmb .prev-holder input[type=text],.frmb .prev-holder input[type=number],.frmb .prev-holder select,.frmb .prev-holder textarea{background-color:#fff;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.frmb .prev-holder select[multiple]{height:auto}.frmb .prev-holder input[type=checkbox],.frmb .prev-holder input[type=radio]{display:inline-block}.frmb .prev-holder input[type=color]{width:60px;padding:2px;display:inline-block}.frmb .required-asterisk{display:none}.frmb .field-label,.frmb .legend{color:#666;margin-bottom:5px;line-height:27px;font-size:16px;font-weight:400}.frmb .disabled-field .field-label{display:block}.frmb .other-val{margin-left:5px;display:none}.frmb .field-actions{position:absolute;top:0;right:0;opacity:0}.frmb .field-actions a:hover{text-decoration:none;color:#000}.frmb .field-actions .btn{display:inline-block;height:32px;padding:0 6px;border-radius:0;border-color:#c5c5c5;background-color:#fff;color:#c5c5c5;line-height:32px;font-size:16px;border-width:0 0 1px 1px}.frmb .field-actions .btn:first-child{border-bottom-left-radius:5px}.frmb .field-actions .toggle-form:hover{background-color:#65aac6;color:#fff}.frmb .field-actions .copy-button{font-size:14px}.frmb .field-actions .copy-button:hover{background-color:#6fc665;color:#fff}.frmb .field-actions .del-button{font-size:20px;line-height:30px}.frmb .field-actions .del-button:hover{background-color:#c66865;color:#fff}.frmb .option-actions{text-align:right;margin-top:10px;width:100%;margin-left:2%}.frmb .option-actions a,.frmb .option-actions button{background:#fff;padding:5px 10px;border:1px solid #c5c5c5;font-size:14px;border-radius:5px;cursor:default}.frmb .sortable-options-wrap{width:81.33333333%;display:inline-block}@media (max-width:481px){.frmb .sortable-options-wrap{display:block;width:100%}}.frmb .sortable-options{display:inline-block;width:100%;margin-left:2%;background:#c5c5c5;margin-bottom:0;border-radius:5px;list-style:none;padding:0}.frmb .sortable-options>li{cursor:move;margin:1px}.tooltip-element,[tooltip]:hover:after{cursor:default;font-size:12px;color:#fff}.frmb .sortable-options>li:nth-child(1) .remove,.radio-group-field .frmb .sortable-options>li:nth-child(2) .remove{display:none}.frmb .sortable-options>li .remove{position:absolute;opacity:1;right:14px;height:17px;width:17px;line-height:17px;text-align:center;top:14px;font-size:18px;padding:0;color:#c10000}.frmb .sortable-options>li .remove:hover{background-color:#c10000;text-decoration:none;color:#fff}.frmb .sortable-options .option-selected{margin:0;width:5%}.frmb .sortable-options input[type=text]{width:calc(44.5% - 17px);margin:0 1%;float:none}.frmb .form-field .form-group{width:100%;clear:left;float:none}.frmb .col-md-6 .form-elements,.frmb .col-md-8 .form-elements{width:100%}.frmb .field-options .add-area .add{clear:both}.frmb .style-wrap button.selected{border:1px solid #000;margin-top:0;margin-right:1px;box-shadow:0 0 0 1px #fff inset;padding:1px 5px}.frmb .form-elements{padding:10px 5px;background:#f7f7f7;border-radius:3px;margin:0;border:1px solid #c5c5c5}.frmb .form-elements .input-wrap{width:81.33333333%;margin-left:2%;float:left}.frmb .form-elements .input-wrap>input[type=checkbox]{margin-top:8px}.frmb .form-elements .add{clear:both}.frmb .form-elements input[type=text],.frmb .form-elements input[type=number],.frmb .form-elements input[type=color],.frmb .form-elements input[type=date],.frmb .form-elements select,.frmb .form-elements textarea{-webkit-transition:background 250ms ease-in-out;transition:background 250ms ease-in-out;padding:6px 12px;border:1px solid #c5c5c5;background-color:#fff}@media (max-width:481px){.frmb .form-elements .input-wrap{width:100%;margin-left:0;float:none}}.frmb .form-elements input[type=number]{width:auto}.frmb .form-elements .btn-group{margin-left:2%}.col-md-6 .frmb .form-elements .false-label,.col-md-6 .frmb .form-elements label,.col-md-8 .frmb .form-elements .false-label,.col-md-8 .frmb .form-elements label{display:block}.frmb .form-elements .false-label:first-child,.frmb .form-elements label:first-child{width:16.66666667%;padding-top:7px;margin-bottom:0;text-align:right;font-weight:700;float:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:capitalize}@media (max-width:481px){.frmb .form-elements .false-label:first-child,.frmb .form-elements label:first-child{display:block;width:auto;float:none;text-align:left}.frmb .form-elements .false-label:first-child.empty-label,.frmb .form-elements label:first-child.empty-label{display:none}}.frmb .form-elements .false-label.multiple,.frmb .form-elements .false-label.other-label,.frmb .form-elements .false-label.required-label,.frmb .form-elements .false-label.roles-label,.frmb .form-elements .false-label.toggle-label,.frmb .form-elements label.multiple,.frmb .form-elements label.other-label,.frmb .form-elements label.required-label,.frmb .form-elements label.roles-label,.frmb .form-elements label.toggle-label{text-align:left;float:none;margin-bottom:-3px;font-weight:400;width:calc(81.3333% - 23px)}.autocomplete-field .sortable-options .option-selected{display:none}.fb-mobile .field-actions{opacity:1}[tooltip]{position:relative}[tooltip]:hover:after{background:rgba(0,0,0,.9);border-radius:5px 5px 5px 0;bottom:23px;content:attr(tooltip);padding:10px 5px;position:absolute;z-index:98;left:2px;width:230px;text-shadow:none;line-height:1.5em}.form-wrap::after,.kc-toggle span::after,.kc-toggle span::before,[tooltip]:hover:before{content:''}[tooltip]:hover:before{border:solid;border-color:#222 transparent;border-width:6px 6px 0;bottom:17px;left:2px;position:absolute;z-index:99;cursor:default}.tooltip-element{visibility:visible;background:#000;width:16px;height:16px;border-radius:8px;display:inline-block;text-align:center;line-height:16px;margin:0 5px}.kc-toggle{padding-left:0!important}.kc-toggle span{position:relative;width:48px;height:24px;background:#e6e6e6;display:inline-block;border-radius:4px;border:1px solid #ccc;padding:2px;overflow:hidden;float:left;margin-right:5px}.kc-toggle span::after,.kc-toggle span::before{position:absolute;display:inline-block;top:0}.kc-toggle span::after{position:relative;width:50%;height:100%;left:0;border-radius:3px;background:-webkit-linear-gradient(top,#fff 0,#ccc 100%);background:linear-gradient(to bottom,#fff 0,#ccc 100%);border:1px solid #999;-webkit-transition:-webkit-transform 50ms;transition:-webkit-transform 50ms;transition:transform 50ms;transition:transform 50ms,-webkit-transform 50ms;-webkit-transform:translateX(0);transform:translateX(0)}.kc-toggle span::before{border-radius:4px;top:2px;left:2px;width:calc(100% - 4px);height:18px;box-shadow:0 0 1px 1px #b3b3b3 inset;background-color:transparent}.kc-toggle input{height:0;overflow:hidden;width:0;opacity:0;pointer-events:none;margin:0}.kc-toggle input:checked+span::after{-webkit-transform:translateX(100%);transform:translateX(100%)}.kc-toggle input:checked+span::before{background-color:#6fc665}.form-wrap{position:relative}.form-wrap::after{display:table;clear:both}.cb-wrap,.stage-wrap{vertical-align:top}.stage-wrap h4{margin-top:0;color:#666}.form-elements input.error{border:1px solid #c10000}.form-elements input.fld-maxlength{width:10%}.form-elements input.field-error{background:#fefefe;border:1px solid #c5c5c5}.form-elements label em{display:block;font-weight:400;font-size:.75em}.form-elements label.maxlength-label{line-height:1em}.form-elements .available-roles{display:none;padding:10px;margin:10px 0;background:#e6e6e6;box-shadow:inset 0 0 2px 0 #b3b3b3}@media (max-width:481px){.form-elements .available-roles{margin-left:0}}.form-elements .available-roles label{font-weight:400;width:auto;float:none;display:inline}.form-elements .available-roles input{display:inline;top:auto}.form-elements,.form-group,.multi-row span,textarea{display:block}.form-elements::after,.form-group::after{content:'.';display:block;height:0;clear:both;visibility:hidden}.form-elements .field-options div:hover,.frmb .legend,.frmb .prev-holder{cursor:move}.frmb-tt{display:none;position:absolute;top:0;left:0;border:1px solid #262626;background-color:#666;border-radius:5px;padding:5px;color:#fff;text-align:left;font-size:12px}.frmb-tt::after,.frmb-tt::before{content:'';position:absolute;border-style:solid;border-width:10px 10px 0;border-color:#666 transparent;display:block;width:0;z-index:1;margin-left:-10px;bottom:-10px;left:20px}.frmb-tt a{text-decoration:underline;color:#fff}.fb-mobile .frmb li .del-button,.fb-mobile .frmb li .toggle-form,.frmb li:hover .del-button,.frmb li:hover .toggle-form{opacity:1}.fresh .frmb .legend .element-info{display:inline-block;visibility:visible;line-height:12px;margin-left:6px}.frmb-xml .ui-dialog-content{white-space:pre-wrap;word-wrap:break-word;font-size:12px;padding:0 30px;margin-top:0}.toggle-form{margin-left:5px;opacity:0}.toggle-form:hover{border-color:#ccc}.toggle-form::before{margin:0}.formb-field-vars .copy-var{display:inline-block;width:24px;height:24px;background:#b3b3b3;text-indent:-9999px}.ui-button .ui-button-text{line-height:0}.form-builder-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);display:none;z-index:10}.form-builder-overlay.visible{display:block}.form-builder-dialog{position:absolute;border-radius:5px;background:#fff;z-index:20;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);top:0;left:0;padding:10px;box-shadow:0 3px 10px #000;min-width:166px}.form-builder-dialog h3{margin-top:0}.form-builder-dialog.data-dialog{width:65%;background-color:#23241f}.form-builder-dialog.data-dialog pre{background:0 0;border:0;box-shadow:none;margin:0;color:#f2f2f2}.form-builder-dialog.positioned{-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.form-builder-dialog.positioned .button-wrap::before{content:'';width:0;height:0;border-left:15px solid transparent;border-right:15px solid transparent;border-top:10px solid #fff;position:absolute;left:50%;top:100%;-webkit-transform:translate(-50%,10px);transform:translate(-50%,10px)}.form-builder-dialog .button-wrap{position:relative;margin-top:10px;text-align:right;clear:both}.form-builder-dialog .button-wrap .btn{margin-left:10px} \ No newline at end of file +@charset "UTF-8";.btn,.btn-group{display:inline-block}.btn-group>.btn,.input-group .form-control{position:relative;float:left}.btn,.btn.active,.btn.btn-active,.btn:active,.form-control{background-image:none}.btn,.btn-group{vertical-align:middle}@font-face{font-family:form-builder-font;src:url(data:application/vnd.ms-fontobject;base64,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YyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=);src:url(data:application/vnd.ms-fontobject;base64,JDIAAFgxAAABAAIAAAAAAAIABQMAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAASBjFqAAAAAAAAAAAAAAAAAAAAAAAACIAZgBvAHIAbQAtAGIAdQBpAGwAZABlAHIALQBmAG8AbgB0AAAADgBSAGUAZwB1AGwAYQByAAAAFgBWAGUAcgBzAGkAbwBuACAAMQAuADAAAAAiAGYAbwByAG0ALQBiAHUAaQBsAGQAZQByAC0AZgBvAG4AdAAAAAAAAAEAAAAPAIAAAwBwR1NVQiCMJXkAAAD8AAAAVE9TLzI+IFOhAAABUAAAAFZjbWFwtpWMLAAAAagAAAJoY3Z0IAbV/wQAACVAAAAAIGZwZ22KkZBZAAAlYAAAC3BnYXNwAAAAEAAAJTgAAAAIZ2x5ZsRmq7cAAAQQAAAcKGhlYWQMmK7hAAAgOAAAADZoaGVhBzwDZAAAIHAAAAAkaG10eEPe//8AACCUAAAASGxvY2FLJkPyAAAg3AAAACZtYXhwAoUMmAAAIQQAAAAgbmFtZdVcxaEAACEkAAADOXBvc3Q+0jAQAAAkYAAAANVwcmVw5UErvAAAMNAAAACGAAEAAAAKADAAPgACbGF0bgAOREZMVAAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAEDxQGQAAUAAAJ6ArwAAACMAnoCvAAAAeAAMQECAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAQOgA8k0DUv9qAFoDUgCWAAAAAQAAAAAAAAAAAAUAAAADAAAALAAAAAQAAAGMAAEAAAAAAIYAAwABAAAALAADAAoAAAGMAAQAWgAAAAoACAACAALoC+gN6BHyTf//AADoAOgN6A/yTf//AAAAAAAAAAAAAQAKACAAIAAkAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAADcAAAAAAAAABEAAOgAAADoAAAAAAEAAOgBAADoAQAAAAIAAOgCAADoAgAAAAMAAOgDAADoAwAAAAQAAOgEAADoBAAAAAUAAOgFAADoBQAAAAYAAOgGAADoBgAAAAcAAOgHAADoBwAAAAgAAOgIAADoCAAAAAkAAOgJAADoCQAAAAoAAOgKAADoCgAAAAsAAOgLAADoCwAAAAwAAOgNAADoDQAAAA0AAOgPAADoDwAAAA4AAOgQAADoEAAAAA8AAOgRAADoEQAAABAAAPJNAADyTQAAABEAEAAA/2oD6ANSAAMABwALAA8AEwAXABsAHwAjACcAKwBLAFAAVABYAHwCPEuwFFBYQJEEAQIjKCMCZQoBCCUkJQgkbQAkKiUkKmshAR8WLBYfZQAsICAsYxQTEQMPHQ4dD2UVEhADDh4eDmMcARgpASMCGCNgACgnMA0vBAcAKAdeBQMCAAsJAgEGAAFeJgwCBgAlCAYlXi4BKi0rAhYfKhZfMiIxAyAAHQ8gHV8bARkZGlYAGhoMSAAeHhdZABcXDRdJG0uwFVBYQJQEAQIjKCMCKG0KAQglJCUIJG0AJColJCprIQEfFiwWHyxtACwgICxjFBMRAw8dDh0PZRUSEAMOHh0OHmscARgpASMCGCNgACgnMA0vBAcAKAdeBQMCAAsJAgEGAAFeJgwCBgAlCAYlXi4BKi0rAhYfKhZfMiIxAyAAHQ8gHV8bARkZGlYAGhoMSAAeHhdZABcXDRdJG0CWBAECIygjAihtCgEIJSQlCCRtACQqJSQqayEBHxYsFh8sbQAsIBYsIGsUExEDDx0OHQ8ObRUSEAMOHh0OHmscARgpASMCGCNgACgnMA0vBAcAKAdeBQMCAAsJAgEGAAFeJgwCBgAlCAYlXi4BKi0rAhYfKhZfMiIxAyAAHQ8gHV8bARkZGlYAGhoMSAAeHhdZABcXDRdJWVlAalVVUVEYGAwMenh3dnV0c3Jxb2poZ2ZlZGNiYWBfXl1bVVhVWFdWUVRRVFNSUE9OTElHRkVEQ0JBQD44NTIwKyopKCcmJSQjIiEgHx4dHBgbGBsaGRcWFRQTEhEQDA8MDxIRERERERAzBRsrATMVIycjFTM3IxUzIxUzNRUzNSMXMzUjJxUzNQMzNSMXMzUjFzM1IzMjFTMBFRQOASsBERQGIyEiJjURND4BMyE1IzUhFSMVITIeAQMpARUhJTUjFTM1IxUBNCYjIREjNSM1MzUjNTM1ISIGHQEUFjMhFSMVITUjNSEyNjUBdz8/fT4+fT4++j8+Pn0+Pj8/vD8/fT8/fT8/vD8/AbUaKxkfIhz9EhwjGisZAZZ9ATl9AVcZKxq7/on+iQLu/Y8/vD8CsBIO/qk/Pj4+Pv5qDhERDgGWfQE5fQFXDhICGj99Pj4+Pz99Pj4+Pz8//c0/Pz8/Pz8CkPoZKhr+iBwiIhwCzxkrGj8+Pj8aK/3UvPs+Pj4+AdQOEv7HPz4/Pj8SDvoOET4/Pz4RDgAAAA8AAP9qA6EDUgADAAcACwAPABMAFwAbAB8AIwAzADcAOwA/AE8AcwCYQJVBJQIdEkktJAMTHQJHIR8CHRMJHVQbARMZFw0DCQgTCV8YFgwDCBURBwMFBAgFXhQQBgMEDwsDAwEABAFeGgESEh5YIAEeHgxIDgoCAwAAHFgAHBwNHElycG1qZ2ZjYF1bVlNNTEVEPz49PDs6OTg3NjU0MS8pJyMiISAfHh0cGxoZGBcWFRQTEhERERERERERECIFHSsXMzUjFzM1IyczNSMXMzUjJzM1IwEzNSMnMzUjATM1IyczNSMDNTQmJyMiBgcVFBY3MzI2ATM1IyczNSMXMzUjNzU0JicjIgYXFRQWNzMyNjcRFAYjISImNRE0NjsBNTQ2OwEyFh0BMzU0NjsBMhYHFTMyFkehocWyssWhocWyssWhoQGbs7PWsrIBrKGh1rOzxAwGJAcKAQwGJAcKAZuhodazs9ahoRIKCCMHDAEKCCMICtcsHPzuHSoqHUg0JSQlNNY2JCMlNgFHHSpPoaGhJLKysiSh/cSh+qH9xKEksgEwoQcKAQwGoQcMAQr+JrIkoaGha6EHCgEMBqEHDAEKLP01HSoqHQLLHSo2JTQ0JTY2JTQ0JTYqAAAAAgAA/8gD4gLCABQAKQAyQC8ZGBcWFRMABwMCAUcUAQFFAAEAAgMBAmAAAwAAA1QAAwMAWAAAAwBMNTs3NAQFGCsBERQOASMhIi4BNRE0PgEzITIWFzcHCQEFJTU0JiMhIgYVERQWMyEyNjUDTBorGf3OGSsaGisZAjIhMwqW1f7U/s4BMgEsEQ79zg4SEg4CMg4RAhr+DBkrGhorGQIyGSsaKiFX8/6VAZZktgwOEREO/c4OEhIOAAgAAP+oA+gDUgADAAcACwAPABMAFwAbAB8AbkBrHQEEBR8BCQQZAQgJGwEGCBUBBwYFRx4BBRoBCRYBBgNGFwEHRAADAAIFAwJeCgEFAAQJBQReAAkACAYJCF4ABgsBBwYHWgAAAAFWAAEBDABJDAwICBMSERAMDwwPDg0ICwgLEhERERAMBRkrESE1IRUhNSEFFSE1ETUhFTUhNSEPAScXEwcnFxMHJxcD6PwYA+j8GAF3AjP9zQIz/c19nF5enJxeXpycXl4DFD67Prs/P/3NPz/6P7xeIH4Btl4gfQG1XiB9AAsAAP+oA+gDUgADAAcACwAPABMAIAApADUAPgBLAFQBBUuwFFBYQFoACwIFAgtlGwESCRJwAAMAAgsDAl4YDAIFDQEECgUEYBcBCgAPBgoPYAAGAAcRBgdeGgEQABEOEBFgGQEOABMIDhNgHBQCCBUWAgkSCAlgAAAAAVYAAQEMAEkbQFsACwIFAgsFbRsBEgkScAADAAILAwJeGAwCBQ0BBAoFBGAXAQoADwYKD2AABgAHEQYHXhoBEAARDhARYBkBDgATCA4TYBwUAggVFgIJEggJYAAAAAFWAAEBDABJWUBCTUxAPzc2KyoiIRUUEBBRUExUTVRGRT9LQEs7OjY+Nz4yMCo1KzUmJSEpIikbGhQgFSAQExATEhEREREREREQHQUdKxEhNSEVITUhBSE1IQUhFSEVNSEVAyIuATQ+ATIeARQOASciBhQWMjY0JgMiLgE0PgEzMhYUBiciBhQWMjY0JgMiLgE0PgEyHgEUDgEnIgYUFjI2NCYD6PwYA+j8GAE5AnH9jwJx/Y8Ccf2P2xkrGhorMisaGisZDhERHBERDhkrGhorGSc3NycOEREbEhINGSsaGisyKxoaKxkOEREcEREDFD67Pvo/+j/6Pz8BthoqMisaGisyKhp9EhwRERwS/oIaKzIrGjVSNX0RHBEVFBX+jxorMisaGisyKxp+EhwRERwSAAAAFQAA/6gD6AMUAA8AEwAXABsAHwA3ADsAPwBDAEcASwBPAFMAVwBbAF8AdwB7AH8AgwCHA0FLsAlQWECdADwHOwc8ZUYBODcGBjhlPQEAADY1ADZeADUANCo1NF4zMS8tBCspJCAcGAUCAysCXyhFJUMhQR0/GQkDJ0QjQh9AGz4XCQQFAwReJiIeGhYFBRUTEQ8NBQsMBQteMjAuLAQqFBIQDgQMCioMXgAKAAkICgleAAgABzwIB14AOwA6OTs6XgA5ADc4OTdeAAYBAQZSAAYGAVkAAQYBTRtLsApQWECiADwHOwc8ZUYBODcGBjhlPQEAADY1ADZeADUANCw1NF4AKisCKlIzMS8tBCspJCAcGAUCAysCXyhFJUMhQR0/GQkDJ0QjQh9AGz4XCQQFAwReJiIeGhYFBRUTEQ8NBQsMBQteMjAuAywUEhAOBAwKLAxeAAoACQgKCV4ACAAHPAgHXgA7ADo5OzpeADkANzg5N14ABgEBBlIABgYBWQABBgFNG0uwC1BYQJ4APAc7BzxlRgE4NwY3OAZtPQEAADY1ADZeADUANCo1NF4zMS8tBCspJCAcGAUCAysCXyhFJUMhQR0/GQkDJ0QjQh9AGz4XCQQFAwReJiIeGhYFBRUTEQ8NBQsMBQteMjAuLAQqFBIQDgQMCioMXgAKAAkICgleAAgABzwIB14AOwA6OTs6XgA5ADc4OTdeAAYBAQZSAAYGAVkAAQYBTRtAnwA8BzsHPDttRgE4NwY3OAZtPQEAADY1ADZeADUANCo1NF4zMS8tBCspJCAcGAUCAysCXyhFJUMhQR0/GQkDJ0QjQh9AGz4XCQQFAwReJiIeGhYFBRUTEQ8NBQsMBQteMjAuLAQqFBIQDgQMCioMXgAKAAkICgleAAgABzwIB14AOwA6OTs6XgA5ADc4OTdeAAYBAQZSAAYGAVkAAQYBTVlZWUClfHxUVFBQTExISEREQEA8PDg4AgCHhoWEg4KBgHx/fH9+fXt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNgX15dXFtaWVhUV1RXVlVQU1BTUlFMT0xPTk1IS0hLSklER0RHRkVAQ0BDQkE8Pzw/Pj04Ozg7Ojk3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQCgcADwIPRwUUKwEhIgYVERQWMyEyNjURNCYFMxUjFTMVIwEhESE1ITUhNSE1MxUzNTMVMzUzFTM1MxUzNTMVMzUzJRUjPQIzFRcVIz0CMxUXFSM9AjMVFxUjPQIzFRcjNTM1IzUzNSM1IxUjNSMVIzUjFSM1IxUjNSMVIzUhNSE1IQE1IRU1ITUhJyE1IQOq/JUcIyMcA2scIiL8eTIyMjIDa/yVA2v8lQNr/JUyXVJXUV5LXlFeLP1vS1KoUVGpS0uvUVGKMjIyMjJeUVhLXlFeS10yA2v8lQNr/RICcf2PAnF9/gwB9AMUIh39EhwjIxwC7hwjhBINE/2JAiwNEwwTDQ0NDQ0NDQ0NDR8TEw0SEg0TEw0SEg0TEw0SEg0TEw0SEiATDRINBgwMDAwMDAwMDBkME/2VPz99Pz4/AAAQAAD/qAPoA1IADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPAA/AEMARwE1S7AUUFhAZhsBCwMMAwtlAAwEBAxjGRcCFQUWBRVlGhgCFgYGFmMiFBEPBA0HDgcNZRMSEAMOCAgOYwkBBB4cAgEdBAFfJB8jAx0ABRUdBV4ABgAHDQYHXyEBCAAACABdCgEDAwJWIAECAgwDSRtAbBsBCwMMAwsMbQAMBAMMBGsZFwIVBRYFFRZtGhgCFgYFFgZrIhQRDwQNBw4HDQ5tExIQAw4IBw4IawkBBB4cAgEdBAFfJB8jAx0ABRUdBV4ABgAHDQYHXyEBCAAACABdCgEDAwJWIAECAgwDSVlAVUREQEAtLRUVAABER0RHRkVAQ0BDQkE/Pjw7Ojk4NzY1NDMyMS0wLTAvLiwrKikoJyYlJCMiISAfHh0cGxoZFRgVGBcWFBMSERAPDg0ADAAMEzQlBRYrGQExFBYzITI2NREzEQUhFSEVIRUhFTUhFRMjNTMFMxUjETMVIzczFSM3MxUjNxUjNSUzFSM3MxUjNzMVIwEnMwU1MxUzNTMVIxwCcRwi+vxXAnH9jwJx/Y8Ccfq8vPzTPz8/P30/P30/P7w//ok/P30/P30/PwHVP3f8+T8+PwNS/JUcIyMcAjMBOD68u7z6vLwCcbw/Pv3NPj4+Pj4+Pj76Pj4+Pj4BcEX6Pz8/PwAGAAD/qAPoAxQAAwAHAAsADwAfACMAt0uwFFBYQEEAAAQBBABlDAEBCgQBCmsACA4BCwYIC14ABgAHAwYHXgADAAIFAwJeDQEFAAQABQReAAoJCQpSAAoKCVkACQoJTRtAQgAABAEEAAFtDAEBCgQBCmsACA4BCwYIC14ABgAHAwYHXgADAAIFAwJeDQEFAAQABQReAAoJCQpSAAoKCVkACQoJTVlAJiAgCAgAACAjICMiIR4bFhMPDg0MCAsICwoJBwYFBAADAAMRDwUVKzc1IRUlITUhHQEhPQEhFSETETQmIyEiBhURFBYzITI2AxEhEbwB9P4MAnH9jwJx/Y8CcbsiHPyVHCMjHANrHCI+/JWjPj76Pn0+Pvo+/c0C7hwjIh39EhwjIwMK/RIC7gAAAwAA/+cD6ALVAB8AIwAnAFtAWAACAwEBAAIBXgQOAgANAQoLAApeDA8CCwkBBQYLBWAIAQYHBwZSCAEGBgdWAAcGB0ogIAEAJyYlJCAjICMiIRoYFxYVFBMSEQ8KCAcGBQQDAgAfAR8QBRQrASE1MzUjFTMVIyIGFREUFjsBFSMVMzUjNSEyNjURNCYBETMRKQERIQOq/W9e+l6cGyQjHJxe+l4CkRwiI/x6nALP/W8CkQJYPz4+PyYY/okcIz4/Pz4jHAF3GCb+SwF3/okBdwAAAAAEAAD/sQNNAv8ABgAUABkAJACGQBceAQIFHRYOBwQDAhkDAgMAAwEBAQAER0uwElBYQCcABQIFbwACAwJvAAMAA28AAAEBAGMGAQEEBAFSBgEBAQRXAAQBBEsbQCYABQIFbwACAwJvAAMAA28AAAEAbwYBAQQEAVIGAQEBBFcABAEES1lAEgAAISAYFxAPCQgABgAGFAcFFSsXNycHFTMVATQjIgcBBhUUMzI3ATYnFwEjNQEUDwEnNzYyHwEWyzKDM0gBXwwFBP7RBA0FBAEvAx7o/jDoA00UXehdFDsWgxQHM4MzPEcCBgwE/tIEBgwEAS4Ecej+L+kBmh0VXelcFRWDFgAAAAADAAD/qAOqAxQABAAIAA8ARUBCCgEERQgGAgQFBG8ABQAFbwcBAAADAgADXgACAQECUgACAgFWAAECAUoJCQEACQ8JDw4NDAsIBwYFAwIABAEECQUUKyUhFSE1ByM1MwE3FyMRIxEB1f4rA6o/fX39cPr6nLyj+/t9PgG2+vr+xwE5AAAWAAAAAAPoAlgAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwBDAEcASwBPAFMAVwDAQL0pDQsJBwUDBwEoDAoIBgQCBwAPAQBeAA8ADhEPDl4AEQAQExEQXgATABIVExJeABUAFBcVFF4AFwAWGRcWXgAZABgbGRheKyclIyEfHQcbGhobUisnJSMhHx0HGxsaViomJCIgHhwHGhsaSldWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIRERERERERERAsBR0rEzM1IxczNSMXMzUjFzM1IxczNSMXMzUjFzM1IwUzNSMFMzUjBTM1IwUzNSMFMzUjBTM1IwUzNSMXMzUjFzM1IxczNSMXMzUjFzM1IxczNSMTMzUjATM1Iz8+Pn0+Pn0+Pn0+Pn0+Pn0+Pn0+PvzTPz8Dqj4+/FY/PwOqPj78Vj8/A6o+PvzTPz99Pz99Pz99Pz99Pz99Pz99Pz8/Pj78Vj8/Aho+Pj4+Pj4+Pj4+Pj4+fT99Pn0/fT59P30+fT8/Pz8/Pz8/Pz8/Pz8Bdz7+DD8AAAAABwAAAAAD6AJYAAMABwALAA8AGAAhACwCMbcqJyQDCQgBR0uwClBYQE4HAQMACgADCm0RAQoMAApjDQEMCAAMYw8BDgkLBQ5lAAsCBQtjBgECBQkCBWsAAQAAAwEAXhABCAAJDggJYAAFBAQFUgAFBQRXAAQFBEsbS7ALUFhARAcBAwAKAAMKbQ0MEQMKCAAKYw8OAgsJAgULZQYBAgUJAgVrAAEAAAMBAF4QAQgACQsICWAABQQEBVIABQUEVwAEBQRLG0uwEVBYQE4HAQMACgADCm0RAQoMAApjDQEMCAAMYw8BDgkLBQ5lAAsCBQtjBgECBQkCBWsAAQAAAwEAXhABCAAJDggJYAAFBAQFUgAFBQRXAAQFBEsbS7ASUFhAUAcBAwAKAAMKbREBCgwACmMNAQwIAAwIaw8BDgkLCQ4LbQALAgULYwYBAgUJAgVrAAEAAAMBAF4QAQgACQ4ICWAABQQEBVIABQUEVwAEBQRLG0uwE1BYQFEHAQMACgADCm0RAQoMAAoMaw0BDAgADAhrDwEOCQsJDgttAAsCBQtjBgECBQkCBWsAAQAAAwEAXhABCAAJDggJYAAFBAQFUgAFBQRXAAQFBEsbQFIHAQMACgADCm0RAQoMAAoMaw0BDAgADAhrDwEOCQsJDgttAAsCCQsCawYBAgUJAgVrAAEAAAMBAF4QAQgACQ4ICWAABQQEBVIABQUEVwAEBQRLWVlZWVlAIxoZERAsKykoJiUjIh4dGSEaIRUUEBgRGBEREREREREQEgUcKxMhNSEDMxEjEyE1KQEzESMFIgYUFjI2NCYnMhYUBiImNDYXMxU3MwcXIycVIz4Da/yVPj8/PwNr/JUDaz4+/dgiJydDJychMDk5YDo6yR9mKHF5KW0fAho+/ksBd/5KPwF3XzJWMjJWMhlAbEBAbEAEYGBqem5uAAAAAQAA/7EDxQMLAH4ATkBLWVQ0AwYFFwECAQgBAAIDRwgBBAkHAgUGBAVgAAYAAQIGAWAKAQIAAAJUCgECAgBYAwEAAgBMenlwb2tlYF9YVU9OSkR0Fj1gCwUYKwUiJiIGIyImNzQ+Ajc2PQE0JyYjISIPARQXHgEyFhcUBgciJiIGIyImNTQ+Ajc2NScRNzYmNC8BLgEnLgEGJjc0NjcyFjI2MzIWFRQGIgYHBhUXFjMhMjc2PQE0Jy4CNTQ2NzIWMjYzMhYVFAYiBgcGFRMUFx4BMhYXFAYDqxliMmIZDRABEhogCRIBBxX+iBYHARUJIh4UAQwPGmgxXhgNDhIWHgkSAQEBAgIEAggFCCIYFgEMDhpoMGAWDg4SGhwKFAEHDwGGDgcBEwouHA4OGGQvYBgODhQYIgcUARMJIBwSAQxPBAQYDRIQAgYGC0PaDAUDA+BPDAYEEBIOGAEEBBgNERAEBAcNQx8Bxg8NDhwKFAoQAgUEAhASDhgBBAQaDREQBAUMTsQCAgYMsk4MBgIMFg4YAQQEGg0REAQFDU398kIMBgQSEA4YAAEAAP+xAskDCwArAC5AKx0IAgECAUcAAgABAAJlAwEBAW4ABAAABFQABAQAWAAABABMPTMTOCMFBRkrARUUBiMiBwYHBhURFAYrASImNREjERQGKwEiJjURJicmJyY1NDY3NjMhMhYCyRQOHAIOBAEWDTwOFFASEDwOFFI3RiUkY0M+qwELDhQC6SkQJAEDDgYe/X0OFBQOAqj9WA4UFA4BFQcaIUNBUFyFFxUUAAAAAgAA/2oDawNSABsAHwBHQEQEAgIADxANAwUGAAVeDgwCBgsJAgcIBgdeAwEBAQxICgEICA0ISQAAHx4dHAAbABsaGRgXFhUUExEREREREREREREFHSsBNSM3IwcjNyMHIxUzByMVMwczNzMHMzczNSM3ByM3MwNrnB99H/offR/byx+snB99H/offR/byx+c+h/6Adt9+vr6+n36ffr6+vp9+vr6AAAAA////2oD6ANSAA8AHwA7AIRADyMBBAUrAQIGAAkBAQcDR0uwDFBYQCwABAUDBQRlAAMAAAYDAGAABgAHAQYHYAAFBQhYAAgIDEgAAQECWAACAg0CSRtALQAEBQMFBANtAAMAAAYDAGAABgAHAQYHYAAFBQhYAAgIDEgAAQECWAACAg0CSVlADDUhJhQTNTYXIwkFHSsFETQmIyEiBhURFBYXITI2ExEUBiMhIiYnETQ2FyEyFicVIzU0JichIgYHERQWOwEVIyImNxE0NjMhMhYDoQwG/aEICgoIAl8HCkg0Jf2hJTQBNiQCXyU01kgKCP2hBwoBDAZaWiQ2ATQlAl8lNj0CXwgKCgj9oQcKAQwCZf2hJTQ0JQJfJTYBNLFaWgcKAQwG/aEICkg2JAJfJTQ0AAABAAAAAQAAqMUYSF8PPPUACwPoAAAAANTJNaAAAAAA1Mk1oP///2oD6ANSAAAACAACAAAAAAAAAAEAAANS/2oAAAPo/////wPoAAEAAAAAAAAAAAAAAAAAAAASA+gAAAPoAAADoAAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAANZAAAD6AAAA+gAAAPoAAAD6AAAAsoAAANrAAAD6P//AAAAAAHKArgDFAOGBIwG4gfqCIII7AlwCbIKmAv6DM4NJg16DhQAAAABAAAAEgCIABYAAAAAAAIAjgCeAHMAAAFbC3AAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEAEQA1AAEAAAAAAAIABwBGAAEAAAAAAAMAEQBNAAEAAAAAAAQAEQBeAAEAAAAAAAUACwBvAAEAAAAAAAYAEQB6AAEAAAAAAAoAKwCLAAEAAAAAAAsAEwC2AAMAAQQJAAAAagDJAAMAAQQJAAEAIgEzAAMAAQQJAAIADgFVAAMAAQQJAAMAIgFjAAMAAQQJAAQAIgGFAAMAAQQJAAUAFgGnAAMAAQQJAAYAIgG9AAMAAQQJAAoAVgHfAAMAAQQJAAsAJgI1Q29weXJpZ2h0IChDKSAyMDE3IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb3JtLWJ1aWxkZXItZm9udFJlZ3VsYXJmb3JtLWJ1aWxkZXItZm9udGZvcm0tYnVpbGRlci1mb250VmVyc2lvbiAxLjBmb3JtLWJ1aWxkZXItZm9udEdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA3ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AcgBtAC0AYgB1AGkAbABkAGUAcgAtAGYAbwBuAHQAUgBlAGcAdQBsAGEAcgBmAG8AcgBtAC0AYgB1AGkAbABkAGUAcgAtAGYAbwBuAHQAZgBvAHIAbQAtAGIAdQBpAGwAZABlAHIALQBmAG8AbgB0AFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AcgBtAC0AYgB1AGkAbABkAGUAcgAtAGYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwAMYXV0b2NvbXBsZXRlBGRhdGUIY2hlY2tib3gOY2hlY2tib3gtZ3JvdXALcmFkaW8tZ3JvdXAJcmljaC10ZXh0BnNlbGVjdAh0ZXh0YXJlYQR0ZXh0BnBlbmNpbARmaWxlBmhpZGRlbgZidXR0b24GaGVhZGVyCXBhcmFncmFwaAZudW1iZXIEY29weQAAAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAABgAGAAYABgDUv9qA1L/arAALCCwAFVYRVkgIEu4AA5RS7AGU1pYsDQbsChZYGYgilVYsAIlYbkIAAgAY2MjYhshIbAAWbAAQyNEsgABAENgQi2wASywIGBmLbACLCBkILDAULAEJlqyKAEKQ0VjRVJbWCEjIRuKWCCwUFBYIbBAWRsgsDhQWCGwOFlZILEBCkNFY0VhZLAoUFghsQEKQ0VjRSCwMFBYIbAwWRsgsMBQWCBmIIqKYSCwClBYYBsgsCBQWCGwCmAbILA2UFghsDZgG2BZWVkbsAErWVkjsABQWGVZWS2wAywgRSCwBCVhZCCwBUNQWLAFI0KwBiNCGyEhWbABYC2wBCwjISMhIGSxBWJCILAGI0KxAQpDRWOxAQpDsAFgRWOwAyohILAGQyCKIIqwASuxMAUlsAQmUVhgUBthUllYI1khILBAU1iwASsbIbBAWSOwAFBYZVktsAUssAdDK7IAAgBDYEItsAYssAcjQiMgsAAjQmGwAmJmsAFjsAFgsAUqLbAHLCAgRSCwC0NjuAQAYiCwAFBYsEBgWWawAWNgRLABYC2wCCyyBwsAQ0VCKiGyAAEAQ2BCLbAJLLAAQyNEsgABAENgQi2wCiwgIEUgsAErI7AAQ7AEJWAgRYojYSBkILAgUFghsAAbsDBQWLAgG7BAWVkjsABQWGVZsAMlI2FERLABYC2wCywgIEUgsAErI7AAQ7AEJWAgRYojYSBksCRQWLAAG7BAWSOwAFBYZVmwAyUjYUREsAFgLbAMLCCwACNCsgsKA0VYIRsjIVkqIS2wDSyxAgJFsGRhRC2wDiywAWAgILAMQ0qwAFBYILAMI0JZsA1DSrAAUlggsA0jQlktsA8sILAQYmawAWMguAQAY4ojYbAOQ2AgimAgsA4jQiMtsBAsS1RYsQRkRFkksA1lI3gtsBEsS1FYS1NYsQRkRFkbIVkksBNlI3gtsBIssQAPQ1VYsQ8PQ7ABYUKwDytZsABDsAIlQrEMAiVCsQ0CJUKwARYjILADJVBYsQEAQ2CwBCVCioogiiNhsA4qISOwAWEgiiNhsA4qIRuxAQBDYLACJUKwAiVhsA4qIVmwDENHsA1DR2CwAmIgsABQWLBAYFlmsAFjILALQ2O4BABiILAAUFiwQGBZZrABY2CxAAATI0SwAUOwAD6yAQEBQ2BCLbATLACxAAJFVFiwDyNCIEWwCyNCsAojsAFgQiBgsAFhtRAQAQAOAEJCimCxEgYrsHIrGyJZLbAULLEAEystsBUssQETKy2wFiyxAhMrLbAXLLEDEystsBgssQQTKy2wGSyxBRMrLbAaLLEGEystsBsssQcTKy2wHCyxCBMrLbAdLLEJEystsB4sALANK7EAAkVUWLAPI0IgRbALI0KwCiOwAWBCIGCwAWG1EBABAA4AQkKKYLESBiuwcisbIlktsB8ssQAeKy2wICyxAR4rLbAhLLECHistsCIssQMeKy2wIyyxBB4rLbAkLLEFHistsCUssQYeKy2wJiyxBx4rLbAnLLEIHistsCgssQkeKy2wKSwgPLABYC2wKiwgYLAQYCBDI7ABYEOwAiVhsAFgsCkqIS2wKyywKiuwKiotsCwsICBHICCwC0NjuAQAYiCwAFBYsEBgWWawAWNgI2E4IyCKVVggRyAgsAtDY7gEAGIgsABQWLBAYFlmsAFjYCNhOBshWS2wLSwAsQACRVRYsAEWsCwqsAEVMBsiWS2wLiwAsA0rsQACRVRYsAEWsCwqsAEVMBsiWS2wLywgNbABYC2wMCwAsAFFY7gEAGIgsABQWLBAYFlmsAFjsAErsAtDY7gEAGIgsABQWLBAYFlmsAFjsAErsAAWtAAAAAAARD4jOLEvARUqLbAxLCA8IEcgsAtDY7gEAGIgsABQWLBAYFlmsAFjYLAAQ2E4LbAyLC4XPC2wMywgPCBHILALQ2O4BABiILAAUFiwQGBZZrABY2CwAENhsAFDYzgtsDQssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIzAQEVFCotsDUssAAWsAQlsAQlRyNHI2GwCUMrZYouIyAgPIo4LbA2LLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbACYiCwAFBYsEBgWWawAWNhIyAgsAQmI0ZhOBsjsAhDRrACJbAIQ0cjRyNhYCCwBEOwAmIgsABQWLBAYFlmsAFjYCMgsAErI7AEQ2CwASuwBSVhsAUlsAJiILAAUFiwQGBZZrABY7AEJmEgsAQlYGQjsAMlYGRQWCEbIyFZIyAgsAQmI0ZhOFktsDcssAAWICAgsAUmIC5HI0cjYSM8OC2wOCywABYgsAgjQiAgIEYjR7ABKyNhOC2wOSywABawAyWwAiVHI0cjYbAAVFguIDwjIRuwAiWwAiVHI0cjYSCwBSWwBCVHI0cjYbAGJbAFJUmwAiVhuQgACABjYyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=) format("embedded-opentype"),url(data:application/octet-stream;base64,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) format("woff2"),url(data:application/font-woff;base64,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) format("woff"),url(data:application/x-font-ttf;base64,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BCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=) format("truetype"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtZXRhZGF0YT5Db3B5cmlnaHQgKEMpIDIwMTcgYnkgb3JpZ2luYWwgYXV0aG9ycyBAIGZvbnRlbGxvLmNvbTwvbWV0YWRhdGE+CjxkZWZzPgo8Zm9udCBpZD0iZm9ybS1idWlsZGVyLWZvbnQiIGhvcml6LWFkdi14PSIxMDAwIiA+Cjxmb250LWZhY2UgZm9udC1mYW1pbHk9ImZvcm0tYnVpbGRlci1mb250IiBmb250LXdlaWdodD0iNDAwIiBmb250LXN0cmV0Y2g9Im5vcm1hbCIgdW5pdHMtcGVyLWVtPSIxMDAwIiBhc2NlbnQ9Ijg1MCIgZGVzY2VudD0iLTE1MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjEwMDAiIC8+CjxnbHlwaCBnbHlwaC1uYW1lPSJhdXRvY29tcGxldGUiIHVuaWNvZGU9IiYjeGU4MDA7IiBkPSJNMzc1IDUzOGg2M3YtNjNoLTYzdjYzeiBtLTEyNSA2MmgtNjJ2LTYyaDYydjYyeiBtMTI1IDBoLTYydi02Mmg2MnY2MnogbS0yNTAtNjJ2LTYzaDYzdjYzaC02M3ogbTYzLTEyNWg2MnY2MmgtNjJ2LTYyeiBtMTI1IDBoNjJ2NjJoLTYydi02MnogbS02MyAxMjV2LTYzaDYzdjYzaC02M3ogbS0xMjUtNTYzaDYzdjYzaC02M3YtNjN6IG0xMjUgMGg2M3Y2M2gtNjN2LTYzeiBtMTI1IDBoNjN2NjNoLTYzdi02M3ogbTE4OCA2M2gtNjN2LTYzaDYzdjYzeiBtNDM3IDU5M3YtMjUwYzAtNTAtNDQtOTMtOTQtOTNoLTMxdi0xODgtMTg4YzAtMzctMjUtNjItNjItNjJoLTc1MGMtMzggMC02MyAyNS02MyA2MnY3MTljMCA1MCA0NCA5NCA5NCA5NGgxODcgMjE5djMxIDMyaC02Mi02M3YzMSAzMWgxNTYgMTU3di0zMS0zMWgtNjMtNjJ2LTMyLTMxaDE4NyAxNTZjNTAgMCA5NC00NCA5NC05NHogbS0xODctNTMxaC0zNzUtMzc1di0xODhoNzUwdjE4OHogbS02MjUgNjN2NjJoLTYzdi02Mmg2M3ogbTEyNSAwdjYyaC02M3YtNjJoNjN6IG02MjUgNDY4YzAgMTktMTMgMzItMzIgMzJoLTM0M3YtMTU3LTE1NmgtMzItMzF2MzEgMzJoLTYydjYyaDYydjMxIDMyaC02MnY2Mmg2MnYzMSAzMmgtNDA2Yy0xOSAwLTMxLTEzLTMxLTMydi0yNTBjMC0xOCAxMi0zMSAzMS0zMWg0MDZ2LTYyaC0xMjV2LTMyLTMxaDE1NiAxNTd2MzEgMzJoLTEyNXY2MmgzNDNjMTkgMCAzMiAxMyAzMiAzMXYyNTB6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJkYXRlIiB1bmljb2RlPSImI3hlODAxOyIgZD0iTTcxLTc5aDE2MXYxNjFoLTE2MXYtMTYxeiBtMTk3IDBoMTc4djE2MWgtMTc4di0xNjF6IG0tMTk3IDE5N2gxNjF2MTc4aC0xNjF2LTE3OHogbTE5NyAwaDE3OHYxNzhoLTE3OHYtMTc4eiBtLTE5NyAyMTRoMTYxdjE2MWgtMTYxdi0xNjF6IG00MTEtNDExaDE3OXYxNjFoLTE3OXYtMTYxeiBtLTIxNCA0MTFoMTc4djE2MWgtMTc4di0xNjF6IG00MjgtNDExaDE2MXYxNjFoLTE2MXYtMTYxeiBtLTIxNCAxOTdoMTc5djE3OGgtMTc5di0xNzh6IG0tMTk2IDQ4MnYxNjFxMCA3LTYgMTJ0LTEyIDZoLTM2cS03IDAtMTItNnQtNi0xMnYtMTYxcTAtNyA2LTEzdDEyLTVoMzZxNyAwIDEyIDV0NiAxM3ogbTQxMC00ODJoMTYxdjE3OGgtMTYxdi0xNzh6IG0tMjE0IDIxNGgxNzl2MTYxaC0xNzl2LTE2MXogbTIxNCAwaDE2MXYxNjFoLTE2MXYtMTYxeiBtMTggMjY4djE2MXEwIDctNSAxMnQtMTMgNmgtMzVxLTcgMC0xMy02dC01LTEydi0xNjFxMC03IDUtMTN0MTMtNWgzNXE4IDAgMTMgNXQ1IDEzeiBtMjE1IDM2di03MTVxMC0yOS0yMi01MHQtNTAtMjFoLTc4NnEtMjkgMC01MCAyMXQtMjEgNTB2NzE1cTAgMjkgMjEgNTB0NTAgMjFoNzJ2NTRxMCAzNyAyNiA2M3Q2MyAyNmgzNnEzNyAwIDYzLTI2dDI2LTYzdi01NGgyMTR2NTRxMCAzNyAyNyA2M3Q2MyAyNmgzNXEzNyAwIDY0LTI2dDI2LTYzdi01NGg3MXEyOSAwIDUwLTIxdDIyLTUweiIgaG9yaXotYWR2LXg9IjkyOC42IiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImNoZWNrYm94IiB1bmljb2RlPSImI3hlODAyOyIgZD0iTTg0NCA1Mzh2LTUwMGMwLTUxLTQ0LTk0LTk0LTk0aC01NjJjLTUwIDAtOTQgNDMtOTQgOTR2NTYyYzAgNTAgNDQgOTQgOTQgOTRoNTYyYzQ0IDAgODEtMzEgOTQtNzVsMTUwIDg3LTE1MC0xNjh6IG0tNjMtNzVsLTMwMC0zNjMtMzA2IDQwNiAzMDYtMTAwIDMwMCAxODJ2MTJjMCAxOS0xMiAzMS0zMSAzMWgtNTYyYy0xOSAwLTMyLTEyLTMyLTMxdi01NjJjMC0xOSAxMy0zMiAzMi0zMmg1NjJjMTkgMCAzMSAxMyAzMSAzMnY0MjV6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJjaGVja2JveC1ncm91cCIgdW5pY29kZT0iJiN4ZTgwMzsiIGQ9Ik0wIDc4OGgxMDAwdjYyaC0xMDAwdi02MnogbTAtMTI1aDEwMDB2NjJoLTEwMDB2LTYyeiBtMzc1LTEyNXYtNjNoNTYzdjYzaC01NjN6IG01NjMtNTYzdjYzaC01NjN2LTYzaDU2M3ogbS01NjMgMjUwaDU2M3Y2M2gtNTYzdi02M3ogbS0xMjUtMTI1bC0xNTYtOTQtOTQgMzIgOTQtMTI2IDE1NiAxODh6IG0wIDI1MGwtMTU2LTk0LTk0IDMyIDk0LTEyNSAxNTYgMTg3eiBtMCAyNTBsLTE1Ni05NC05NCAzMiA5NC0xMjUgMTU2IDE4N3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InJhZGlvLWdyb3VwIiB1bmljb2RlPSImI3hlODA0OyIgZD0iTTAgNzg4aDEwMDB2NjJoLTEwMDB2LTYyeiBtMC0xMjVoMTAwMHY2MmgtMTAwMHYtNjJ6IG0zMTMtMTg4aDYyNXY2M2gtNjI1di02M3ogbTYyNS0xODdoLTYyNXYtNjNoNjI1djYzeiBtMC0zMTN2NjNoLTYyNXYtNjNoNjI1eiBtLTg0NCA0MzhjLTUwIDAtOTQgNDMtOTQgOTNzNDQgOTQgOTQgOTQgOTQtNDQgOTQtOTQtNDQtOTMtOTQtOTN6IG0wIDEyNWMtMTkgMC0zMS0xMy0zMS0zMnMxMi0zMSAzMS0zMSAzMSAxMyAzMSAzMS0xMiAzMi0zMSAzMnogbTAtMzgyYy01MCAwLTk0IDQ0LTk0IDk0czQ0IDk0IDk0IDk0IDk0LTM4IDk0LTk0LTQ0LTk0LTk0LTk0eiBtMCAxMjVjLTE5IDAtMzEtMTItMzEtMzFzMTItMzEgMzEtMzEgMzEgMTkgMzEgMzEtMTIgMzEtMzEgMzF6IG0wLTM2OWMtNTAgMC05NCA0NC05NCA5NHM0NCA5NCA5NCA5NCA5NC00NCA5NC05NC00NC05NC05NC05NHogbTAgMTI2Yy0xOSAwLTMxLTEzLTMxLTMyczEyLTMxIDMxLTMxIDMxIDEyIDMxIDMxLTEyIDMyLTMxIDMyeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0icmljaC10ZXh0IiB1bmljb2RlPSImI3hlODA1OyIgZD0iTTkzOCA3ODhoLTg3NWMtMzggMC02My0yNS02My02M3YtNzUwYzAtMzggMjUtNjMgNjMtNjNoODc1YzM3IDAgNjIgMjUgNjIgNjN2NzUwYzAgMzgtMjUgNjMtNjIgNjN6IG0tODc1LTEzMmg1MHYtMThoLTUwdjE4eiBtMC0zMWg1MHYtMTloLTUwdjE5eiBtODc1LTY1MGgtODc1djU1Nmg4NzV2LTU1NnogbTAgNTY5aC04NzV2MTloODc1di0xOXogbTAgMzFoLTg3NXYxOWg1MHYtMTNoOTN2MTNoODJ2LTEzaDg3djEzaDgxdi0xM2g5NHYxM2g3NXYtMTNoOTR2MTNoODF2LTEzaDk0djEzaDQ0di0xOXogbS02NTcgNTB2LTE5aC03NXYxOWg3NXogbS03NSAxM3YxOGg4MnYtMThoLTgyeiBtMjUwLTEzdi0xOWgtODF2MTloODF6IG0tODEgMTN2MThoODF2LTE4aC04MXogbTI1MC0xM3YtMTloLTc1djE5aDc1eiBtLTc1IDEzdjE4aDc1di0xOGgtNzV6IG0yNTAtMTN2LTE5aC04MXYxOWg4MXogbS04MSAxM3YxOGg4MXYtMThoLTgxeiBtMjE5LTMyaC01MHYxOWg1MHYtMTl6IG0wIDMyaC01MHYxOGg1MHYtMTh6IG0wIDMxaC01MHY2aC05NHYtMTJoLTgxdjEyaC04OHYtMTJoLTc1djEyaC05NHYtMTJoLTgxdjEyaC05NHYtMTJoLTc1djEyaC05M3YtMTJoLTUwdjI1aDg3NXYtMTl6IG0wIDMxaC04NzV2MTloODc1di0xOXogbS03NTAtNjAwdjYzaDYyNXYtNjNoLTYyNXogbTYyNSAxMjVoLTYyNXY2M2g2MjV2LTYzeiBtLTEyNSAxMjVoLTUwMHY2M2g1MDB2LTYzeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0ic2VsZWN0IiB1bmljb2RlPSImI3hlODA2OyIgZD0iTTAgODUwdi04NzVoMGMwLTM4IDI1LTYzIDYzLTYzaDYyNWMzNyAwIDYyIDI1IDYyIDYzaDB2NTYzaDI1MHYzMTJoLTEwMDB6IG02My02Mmg2MjV2LTE4OGgtNjI1djE4OHogbTAtMzc1aDYyNXYtMTg4aC02MjV2MTg4eiBtMC00Mzh2MTg4aDYyNXYtMTg4aC02MjV6IG04NzUgNjI1aC0xODh2MTg4aDE4OHYtMTg4eiBtLTgxMyAxMjVoNjN2LTYyaC02M3Y2MnogbTAtNjI1aDYzdi02MmgtNjN2NjJ6IG0xMjUgMGg2M3YtNjJoLTYzdjYyeiBtMTI1IDBoNjN2LTYyaC02M3Y2MnogbTE4OCAwdi02MmgtNjN2NjJoNjN6IG0tNDM4IDI1MGg2M3YtNjJoLTYzdjYyeiBtMTI1IDBoNjN2LTYyaC02M3Y2MnogbTEyNSAwaDYzdi02MmgtNjN2NjJ6IG00NjkgMzA2bC02MyA2OWgxMTlsLTU2LTY5eiBtLTcxOS0xODF2NjNoNjN2LTYzaC02M2wwIDB6IG0xMjUgMHY2M2g2M3YtNjNoLTYzbDAgMHoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InRleHRhcmVhIiB1bmljb2RlPSImI3hlODA3OyIgZD0iTTE4OCAxNjN2NjJoNTAwdi02MmgtNTAwbDAgMHogbTAgMjUwaDYyNXY2MmgtNjI1di02MmwwIDB6IG0wLTYzdi02Mmg2MjV2NjJoLTYyNWwwIDB6IG02MjUgMjUwaC02MjV2LTYyaDYyNXY2MmwwIDB6IG0xODctNjI1djc1MGMwIDM4LTI1IDYzLTYyIDYzaC04NzVjLTM4IDAtNjMtMjUtNjMtNjN2LTc1MGMwLTM4IDI1LTYzIDYzLTYzaDg3NWMzNyAwIDYyIDI1IDYyIDYzeiBtLTYyIDc1MHYtNzUwaC04NzV2NzUwaDg3NXoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InRleHQiIHVuaWNvZGU9IiYjeGU4MDg7IiBkPSJNOTM4IDYwMGgtNjU3djYzaDk0djYyaC05NC02Mi05NHYtNjJoOTR2LTYzaC0xNTZjLTM4IDAtNjMtMzEtNjMtNjJ2LTM3NWMwLTM4IDI1LTYzIDYzLTYzaDE1NnYtNjJoLTk0di02M2gyNTB2NjNoLTk0djYyaDY1N2MzNyAwIDYyIDI1IDYyIDYzdjM3NWMwIDMxLTI1IDYyLTYyIDYyeiBtLTg3NS00Mzd2Mzc1aDE1NnYtMzc1aC0xNTZ6IG04NzUgMGgtNjU3djM3NWg2NTd2LTM3NXoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InBlbmNpbCIgdW5pY29kZT0iJiN4ZTgwOTsiIGQ9Ik0yMDMtN2w1MCA1MS0xMzEgMTMxLTUxLTUxdi02MGg3MnYtNzFoNjB6IG0yOTEgNTE4cTAgMTItMTIgMTItNSAwLTktNGwtMzAzLTMwMnEtNC00LTQtMTAgMC0xMiAxMy0xMiA1IDAgOSA0bDMwMyAzMDJxMyA0IDMgMTB6IG0tMzAgMTA3bDIzMi0yMzItNDY0LTQ2NWgtMjMydjIzM3ogbTM4MS01NHEwLTI5LTIwLTUwbC05My05My0yMzIgMjMzIDkzIDkycTIwIDIxIDUwIDIxIDI5IDAgNTEtMjFsMTMxLTEzMXEyMC0yMiAyMC01MXoiIGhvcml6LWFkdi14PSI4NTcuMSIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJmaWxlIiB1bmljb2RlPSImI3hlODBhOyIgZD0iTTQ2OSAxNjNoLTQ2OXYtMjUxaDkzOHYyNTFoLTQ2OXogbTQwNi0xMjVoLTEyNXY2MmgxMjV2LTYyeiBtLTY1NiA1MDBsMjUwIDI1MCAyNTAtMjUwaC0xNTZ2LTMxM2gtMTg4djMxM3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImhpZGRlbiIgdW5pY29kZT0iJiN4ZTgwYjsiIGQ9Ik02MyA1MzhsNjIgMCAwIDYyLTYyIDB6IG0xMjUgMGw2MiAwIDAgNjItNjIgMHogbTEyNSAwbDYyIDAgMCA2Mi02MiAweiBtMTI1IDBsNjIgMCAwIDYyLTYyIDB6IG0xMjUgMGw2MiAwIDAgNjItNjIgMHogbTEyNSAwbDYyIDAgMCA2Mi02MiAweiBtMTI1IDBsNjIgMCAwIDYyLTYyIDB6IG0tODEzLTYzbDYzIDAgMCA2My02MyAweiBtOTM4LTYybDYyIDAgMCA2Mi02MiAweiBtLTkzOC02M2w2MyAwIDAgNjMtNjMgMHogbTkzOC02Mmw2MiAwIDAgNjItNjIgMHogbS05MzgtNjNsNjMgMCAwIDYzLTYzIDB6IG05MzgtNjJsNjIgMCAwIDYyLTYyIDB6IG0tODEzLTYzbDYzIDAgMCA2My02MyAweiBtMTI1IDBsNjMgMCAwIDYzLTYzIDB6IG0xMjUgMGw2MyAwIDAgNjMtNjMgMHogbTEyNSAwbDYzIDAgMCA2My02MyAweiBtMTI1IDBsNjMgMCAwIDYzLTYzIDB6IG0xMjUgMGw2MyAwIDAgNjMtNjMgMHogbTEyNSAwbDYzIDAgMCA2My02MyAweiBtNjMgNDM4bDYyIDAgMCA2Mi02MiAweiBtLTkzOC00MzhsNjMgMCAwIDYzLTYzIDB6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJidXR0b24iIHVuaWNvZGU9IiYjeGU4MGQ7IiBkPSJNNjIgNTM4bDg3NSAwIDAgNjItODc1IDB6IG0tNjItMzc1bDYzIDAgMCAzNzUtNjMgMHogbTYzLTYzbDg3NSAwIDAgNjMtODc1IDB6IG04NzUgNjNsNjIgMCAwIDM3NS02MiAweiBtLTU1MiAyODBxLTM0IDAtNTQtMjUtMTktMjUtMTktNjggMC00MyAxOS02OCAyMC0yNSA1NC0yNSAzMyAwIDUzIDI1IDE5IDI1IDE5IDY4IDAgNDMtMTkgNjgtMjAgMjUtNTMgMjV6IG0wIDI1cTQ4IDAgNzYtMzIgMjktMzIgMjktODYgMC01NC0yOS04Ni0yOC0zMi03Ni0zMi00OCAwLTc3IDMyLTI5IDMyLTI5IDg2IDAgNTQgMjkgODYgMjkgMzIgNzcgMzJ6IG0xNTMtNGwzMSAwIDAtOTYgMTAyIDk2IDQwIDAtMTEzLTEwNiAxMjEtMTIyLTQxIDAtMTA5IDExMCAwLTExMC0zMSAwIDAgMjI4eiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0iaGVhZGVyIiB1bmljb2RlPSImI3hlODBmOyIgZD0iTTkzOS03OXEtMjUgMC03NCAydC03NSAycS0yNCAwLTczLTJ0LTc0LTJxLTEzIDAtMjEgMTJ0LTcgMjVxMCAxOCA5IDI2dDIyIDkgMjkgNCAyNSA5cTE4IDExIDE4IDc4bDAgMjE4cTAgMTItMSAxNy03IDMtMjggM2gtMzc2cS0yMiAwLTI5LTMgMC01IDAtMTdsLTEtMjA3cTAtNzkgMjEtOTEgOS02IDI2LTh0MzItMiAyNS04IDExLTI2cTAtMTQtNi0yNnQtMjEtMTNxLTI2IDAtNzggMnQtNzcgMnEtMjQgMC03MS0ydC03MS0ycS0xMyAwLTIwIDEydC03IDI1cTAgMTcgOSAyNXQyMCAxMCAyNiA0IDI0IDlxMTggMTMgMTggODBsLTEgMzF2NDU0cTAgMiAxIDE1dDAgMjAtMSAyMS0yIDI0LTQgMjAtNiAxOC05IDEwcS04IDUtMjUgN3QtMjkgMS0yMyA3LTEwIDI2cTAgMTQgNiAyNnQyMCAxM3EyNiAwIDc4LTJ0NzctMnEyMyAwIDcxIDJ0NzAgMnExNCAwIDIxLTEzdDctMjZxMC0xNy05LTI1dC0yMi04LTI3LTItMjQtN3EtMjAtMTItMjAtOTBsMS0xNzhxMC0xMiAwLTE4IDctMiAyMi0yaDM5MHExNCAwIDIxIDIgMSA2IDEgMThsMCAxNzhxMCA3OC0xOSA5MC0xMCA2LTMzIDd0LTM3IDctMTQgMjhxMCAxNCA3IDI2dDIxIDEzcTI0IDAgNzQtMnQ3My0ycTI0IDAgNzIgMnQ3MiAycTE0IDAgMjEtMTN0Ny0yNnEwLTE3LTEwLTI1dC0yMi04LTI5LTItMjQtN3EtMjAtMTMtMjAtOTBsMS01MjZxMC02NiAxOS03OCA5LTYgMjUtOHQzMC0yIDIzLTkgMTAtMjVxMC0xNC02LTI2dC0yMC0xM3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InBhcmFncmFwaCIgdW5pY29kZT0iJiN4ZTgxMDsiIGQ9Ik03MTMgNzQ1di00MXEwLTE2LTEwLTM0dC0yNC0xOHEtMjggMC0zMC0xLTE0LTMtMTgtMTctMS02LTEtMzZ2LTY0M3EwLTE0LTExLTI0dC0yNC0xMGgtNjBxLTE0IDAtMjQgMTB0LTEwIDI0djY4MGgtODB2LTY4MHEwLTE0LTktMjR0LTI1LTEwaC02MHEtMTQgMC0yNCAxMHQtMTAgMjR2Mjc3cS04MiA3LTEzNyAzMy03MCAzMy0xMDcgMTAwLTM2IDY1LTM2IDE0NSAwIDkyIDUwIDE1OSA0OSA2NiAxMTYgODkgNjIgMjEgMjMzIDIxaDI2N3ExNCAwIDI0LTEwdDEwLTI0eiIgaG9yaXotYWR2LXg9IjcxNC4zIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9Im51bWJlciIgdW5pY29kZT0iJiN4ZTgxMTsiIGQ9Ik04NzUgNDc1djEyNWgtMTU2bDMxIDI1MGgtMTI1bC0zMS0yNTBoLTI1MGwzMSAyNTBoLTEyNWwtMzEtMjUwaC0yMTl2LTEyNWgyMDNsLTMxLTI1MGgtMTcydi0xMjVoMTU2bC0zMS0yNTBoMTI1bDMxIDI1MGgyNTBsLTMxLTI1MGgxMjVsMzEgMjUwaDIxOXYxMjVoLTIwM2wzMSAyNTBoMTcyeiBtLTMyOC0yNTBoLTI1MGwzMSAyNTBoMjUwbC0zMS0yNTB6IiBob3Jpei1hZHYteD0iODc1IiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImNvcHkiIHVuaWNvZGU9IiYjeGYyNGQ7IiBkPSJNOTI5LTYxdjYwN3EwIDgtNiAxM3QtMTIgNWgtNjA3cS04IDAtMTMtNXQtNS0xM3YtNjA3cTAtNyA1LTEydDEzLTZoNjA3cTcgMCAxMiA2dDYgMTJ6IG03MSA2MDd2LTYwN3EwLTM3LTI2LTYzdC02My0yNmgtNjA3cS0zNyAwLTYzIDI2dC0yNyA2M3Y2MDdxMCAzNyAyNyA2NHQ2MyAyNmg2MDdxMzcgMCA2My0yNnQyNi02NHogbS0yMTQgMjE1di05MGgtNzJ2OTBxMCA3LTUgMTJ0LTEzIDZoLTYwN3EtNyAwLTEyLTZ0LTYtMTJ2LTYwN3EwLTggNi0xM3QxMi01aDkwdi03MmgtOTBxLTM2IDAtNjMgMjd0LTI2IDYzdjYwN3EwIDM3IDI2IDYzdDYzIDI2aDYwN3EzNyAwIDY0LTI2dDI2LTYzeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+CjwvZm9udD4KPC9kZWZzPgo8L3N2Zz4=) format("svg");font-weight:400;font-style:normal}[class*=" icon-"]:before,[class^=icon-]:before{font-family:form-builder-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-autocomplete:before{content:'\e800'}.icon-date:before{content:'\e801'}.icon-checkbox:before{content:'\e802'}.icon-checkbox-group:before{content:'\e803'}.icon-radio-group:before{content:'\e804'}.icon-rich-text:before{content:'\e805'}.icon-select:before{content:'\e806'}.icon-textarea:before{content:'\e807'}.icon-text:before{content:'\e808'}.icon-pencil:before{content:'\e809'}.icon-file:before{content:'\e80a'}.icon-hidden:before{content:'\e80b'}.icon-button:before{content:'\e80d'}.icon-header:before{content:'\e80f'}.icon-paragraph:before{content:'\e810'}.icon-number:before{content:'\e811'}.icon-copy:before{content:'\f24d'}*{box-sizing:border-box}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.btn,.frmb .prev-holder label,.frmb .sortable-options-wrap label,.frmb li.disabled-field label,.frmb li.no-fields label{font-weight:400}textarea{overflow:auto}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}.btn-group{position:relative}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-group .input-group .form-control:last-child,.btn-group .input-group-addon:last-child,.btn-group .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.btn-group .input-group-btn:first-child>.btn:not(:first-child),.btn-group .input-group-btn:last-child>.btn,.btn-group .input-group-btn:last-child>.btn-group>.btn,.btn-group .input-group-btn:last-child>.dropdown-toggle,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn{padding:6px 12px;margin-bottom:0;font-size:14px;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:4px}.btn.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn.btn-sm,.btn.btn-xs{font-size:12px;line-height:1.5;border-radius:3px}.btn.btn-sm{padding:5px 10px}.btn.btn-xs{padding:1px 5px}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.input-group{position:relative;display:table;border-collapse:separate}.form-control,output{display:block;font-size:14px;line-height:1.42857143}.input-group .form-control{z-index:2;width:100%;margin-bottom:0}textarea.form-control{height:auto}.form-control{height:34px;width:100%;padding:6px 12px;border-radius:4px}.form-control:focus{outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-group{margin-left:0;margin-bottom:15px}.pull-right{float:right}.pull-left{float:left}.fb-required,.required-asterisk{color:#c10000}.fb-checkbox-inline,.fb-radio-inline{display:inline-block;padding-left:20px;vertical-align:middle}.fb-checkbox-inline:first-child,.fb-radio-inline:first-child{padding-left:0}.fb-autocomplete-list{background-color:#fff;display:none;list-style:none;padding:0;border:1px solid #ccc;border-width:0 1px 1px;position:absolute;z-index:20;max-height:200px;overflow-y:auto}.fb-autocomplete-list li{display:none;cursor:default;padding:5px;margin:0;-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.fb-autocomplete-list li.active-option,.fb-autocomplete-list li:hover{background-color:rgba(0,0,0,.075)}@-webkit-keyframes PLACEHOLDER{0%{height:1px}100%{height:15px}}@keyframes PLACEHOLDER{0%{height:1px}100%{height:15px}}.cb-wrap{float:right;width:26%;-webkit-transition:-webkit-transform 250ms;transition:-webkit-transform 250ms;transition:transform 250ms;transition:transform 250ms,-webkit-transform 250ms}.cb-wrap.pull-left .form-actions{float:left}.cb-wrap h4{margin-top:0;color:#666}.cb-wrap .save:hover{color:#08fe00}@media (max-width:481px){.cb-wrap{width:64px}.cb-wrap h4{display:none}}.frmb-control{margin:0;padding:1px;border-radius:5px}.frmb-control li{cursor:move;list-style:none;margin:0 0 -1px;padding:10px;text-align:left;background:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;box-shadow:inset 0 0 0 1px #c5c5c5}.frmb-control li .control-icon{width:16px;height:auto;margin-right:10px;margin-left:.2em;display:inline-block}.frmb-control li .control-icon img,.frmb-control li .control-icon svg{max-width:100%;height:auto}.frmb-control li:first-child{border-radius:5px 5px 0 0;margin-top:0}.frmb-control li:last-child{border-radius:0 0 5px 5px}.frmb-control li::before{margin-right:10px;font-size:16px}.frmb-control li:hover{background-color:#f2f2f2}.frmb-control li.ui-sortable-helper{border-radius:5px;-webkit-transition:box-shadow 250ms;transition:box-shadow 250ms;box-shadow:2px 2px 6px 0 #666;border:1px solid #fff}.frmb-control li.ui-state-highlight{width:0;overflow:hidden;padding:0;margin:0;border:0}.frmb-control li.moving{opacity:.6}.frmb-control li.fb-separator{background-color:transparent;box-shadow:none;padding:0;cursor:default}.frmb-control li.fb-separator hr{margin:10px 0}@media (max-width:481px){.frmb-control li::before{font-size:30px}.frmb-control li span{display:none}}.frmb-control.sort-enabled li.ui-state-highlight{box-shadow:none;height:0;width:100%;background:-webkit-radial-gradient(center ellipse,#545454 0,transparent 75%);background:radial-gradient(ellipse at center,#545454 0,transparent 75%);border:0;-webkit-clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);visibility:visible;overflow:hidden;margin:1px 0 3px;-webkit-animation:PLACEHOLDER 250ms forwards;animation:PLACEHOLDER 250ms forwards}.frmb-control .input-set-0{border-radius:5px 5px 0 0}.fb-mobile .form-actions{width:100%}.fb-mobile .form-actions button{width:100%;font-size:.85em!important;display:block!important;border-radius:0!important;margin-top:-1px;margin-left:0!important}.fb-mobile .form-actions button:first-child{border-radius:5px 5px 0 0!important;margin-top:0!important;border-bottom:0 none}.fb-mobile .form-actions button:last-child{border-radius:0 0 5px 5px!important}.form-actions{float:right;margin-top:5px}.form-actions button{border:0}.empty .frmb{border:3px dashed #ccc;margin-right:5px;background-color:rgba(255,255,255,.25)}.stage-wrap{position:relative;float:left;width:74%}.stage-wrap.pull-right .frmb{margin:0 0 0 6px}@media (max-width:481px){.stage-wrap{width:calc(100% - 64px)}}.stage-wrap.empty::after{content:attr(data-content);position:absolute;text-align:center;top:50%;left:0;width:100%;margin-top:-1em}.frmb .prev-holder input[type=number],.frmb .prev-holder input[type=date]{width:auto}.frmb{list-style-type:none;min-height:200px;margin:0 6px 0 0;padding:0;-webkit-transition:background-color .5s ease-in-out;transition:background-color .5s ease-in-out}.frmb .fb-required{color:#c10000}.frmb.removing{overflow:hidden}.frmb>li:hover{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 0 8px rgba(102,175,233,.6)}.frmb>li:hover .field-actions{opacity:1}.frmb>li:hover li :hover{background:#fefefe}.frmb li{position:relative;padding:6px;clear:both;margin-left:0;margin-bottom:3px;background-color:#fff;-webkit-transition:background-color 250ms ease-in-out,margin-top .4s;transition:background-color 250ms ease-in-out,margin-top .4s}.frmb li.hidden-field{background-color:rgba(255,255,255,.6)}.frmb li:first-child{border-top-right-radius:5px;border-top-left-radius:5px}.frmb li:first-child .field-actions .btn:last-child{border-radius:0 5px 0 0}.frmb li:last-child{border-bottom-right-radius:5px;border-bottom-left-radius:5px}@keyframes PLACEHOLDER{0%{height:0}100%{height:15px}}.frmb li.frmb-placeholder,.frmb li.ui-state-highlight{height:0;padding:0;background:-webkit-radial-gradient(center ellipse,#545454 0,transparent 75%);background:radial-gradient(ellipse at center,#545454 0,transparent 75%);border:0;-webkit-clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);visibility:visible;overflow:hidden;margin-bottom:3px;-webkit-animation:PLACEHOLDER 250ms forwards;animation:PLACEHOLDER 250ms forwards}.frmb li.moving,.frmb li.ui-sortable-helper{-webkit-transition:box-shadow .5s ease-in-out;transition:box-shadow .5s ease-in-out;box-shadow:2px 2px 6px 0 #666;border:1px solid #fff;border-radius:5px}.frmb li.disabled-field{z-index:1;position:relative;overflow:visible}.frmb li.deleting,.frmb-tt{z-index:20;pointer-events:none}.frmb li.disabled-field:hover .frmb-tt{display:inline-block}.frmb li.disabled-field [type=checkbox]{float:left;margin-right:10px}.frmb li.disabled-field h2{border-bottom:0 none}.frmb li.disabled-field label{font-size:12px;color:#666}.frmb li.disabled-field .prev-holder{cursor:default;line-height:28px;padding-left:5px}.frmb li .close-field{position:absolute;color:#666;left:50%;bottom:6px;background:#fff;border-top:1px solid #c5c5c5;border-left:1px solid #c5c5c5;border-right:1px solid #c5c5c5;-webkit-transform:translateX(-50%);transform:translateX(-50%);padding:0 5px;border-top-right-radius:3px;border-top-left-radius:3px;cursor:pointer;-webkit-transition:background-color 250ms ease-in-out;transition:background-color 250ms ease-in-out}.frmb li .close-field:hover{text-decoration:none}.frmb li.button-field .prev-holder,.frmb li.button-field address,.frmb li.button-field blockquote,.frmb li.button-field canvas,.frmb li.button-field h1,.frmb li.button-field h2,.frmb li.button-field h3,.frmb li.button-field output,.frmb li.button-field p,.frmb li.header-field .prev-holder,.frmb li.header-field address,.frmb li.header-field blockquote,.frmb li.header-field canvas,.frmb li.header-field h1,.frmb li.header-field h2,.frmb li.header-field h3,.frmb li.header-field output,.frmb li.header-field p,.frmb li.paragraph-field .prev-holder,.frmb li.paragraph-field address,.frmb li.paragraph-field blockquote,.frmb li.paragraph-field canvas,.frmb li.paragraph-field h1,.frmb li.paragraph-field h2,.frmb li.paragraph-field h3,.frmb li.paragraph-field output,.frmb li.paragraph-field p{margin:0}.frmb li.button-field .field-label,.frmb li.header-field .field-label,.frmb li.paragraph-field .field-label{display:none}.frmb li.button-field.editing .field-label,.frmb li.header-field.editing .field-label,.frmb li.paragraph-field.editing .field-label{display:block}.frmb .frm-holder,.frmb li.checkbox-field .field-label{display:none}.frmb li.paragraph-field .fld-label{min-height:150px}.frmb li.delete:hover,.frmb li.delete:hover .close-field,.frmb li.deleting,.frmb li.deleting .close-field,.frmb li:hover li.delete:hover,.frmb li:hover li.delete:hover .close-field{background-color:#fdd}.frmb.disabled-field{padding:0 5px}.frmb.disabled-field :hover{border-color:transparent}.frmb.disabled-field .form-element{float:none;margin-bottom:10px;overflow:visible;padding:5px 0;position:relative}.frmb .tooltip{left:20px}.frmb .prev-holder{display:block}.frmb .prev-holder .form-group{margin:0}.frmb .prev-holder .ql-editor{min-height:125px}.frmb .prev-holder .form-group>label:not([class=fb-checkbox-label]){display:none}.frmb .prev-holder input[type=text],.frmb .prev-holder input[type=number],.frmb .prev-holder select,.frmb .prev-holder textarea{background-color:#fff;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.frmb .prev-holder select[multiple]{height:auto}.frmb .prev-holder input[type=checkbox],.frmb .prev-holder input[type=radio]{display:inline-block}.frmb .prev-holder input[type=color]{width:60px;padding:2px;display:inline-block}.frmb .required-asterisk{display:none}.frmb .field-label,.frmb .legend{color:#666;margin-bottom:5px;line-height:27px;font-size:16px;font-weight:400}.frmb .disabled-field .field-label{display:block}.frmb .other-val{margin-left:5px;display:none}.frmb .field-actions{position:absolute;top:0;right:0;opacity:0}.frmb .field-actions a:hover{text-decoration:none;color:#000}.frmb .field-actions .btn{display:inline-block;height:32px;padding:0 6px;border-radius:0;border-color:#c5c5c5;background-color:#fff;color:#c5c5c5;line-height:32px;font-size:16px;border-width:0 0 1px 1px}.frmb .field-actions .btn:first-child{border-bottom-left-radius:5px}.frmb .field-actions .toggle-form:hover{background-color:#65aac6;color:#fff}.frmb .field-actions .copy-button{font-size:14px}.frmb .field-actions .copy-button:hover{background-color:#6fc665;color:#fff}.frmb .field-actions .del-button{font-size:20px;line-height:30px}.frmb .field-actions .del-button:hover{background-color:#c66865;color:#fff}.frmb .option-actions{text-align:right;margin-top:10px;width:100%;margin-left:2%}.frmb .option-actions a,.frmb .option-actions button{background:#fff;padding:5px 10px;border:1px solid #c5c5c5;font-size:14px;border-radius:5px;cursor:default}.frmb .sortable-options-wrap{width:81.33333333%;display:inline-block}@media (max-width:481px){.frmb .sortable-options-wrap{display:block;width:100%}}.frmb .sortable-options{display:inline-block;width:100%;margin-left:2%;background:#c5c5c5;margin-bottom:0;border-radius:5px;list-style:none;padding:0}.frmb .sortable-options>li{cursor:move;margin:1px}.tooltip-element,[tooltip]:hover:after{cursor:default;font-size:12px;color:#fff}.frmb .sortable-options>li:nth-child(1) .remove,.radio-group-field .frmb .sortable-options>li:nth-child(2) .remove{display:none}.frmb .sortable-options>li .remove{position:absolute;opacity:1;right:14px;height:17px;width:17px;line-height:17px;text-align:center;top:14px;font-size:18px;padding:0;color:#c10000}.frmb .sortable-options>li .remove:hover{background-color:#c10000;text-decoration:none;color:#fff}.frmb .sortable-options .option-selected{margin:0;width:5%}.frmb .sortable-options input[type=text]{width:calc(44.5% - 17px);margin:0 1%;float:none}.frmb .form-field .form-group{width:100%;clear:left;float:none}.frmb .col-md-6 .form-elements,.frmb .col-md-8 .form-elements{width:100%}.frmb .field-options .add-area .add{clear:both}.frmb .style-wrap button.selected{border:1px solid #000;margin-top:0;margin-right:1px;box-shadow:0 0 0 1px #fff inset;padding:1px 5px}.frmb .form-elements{padding:10px 5px;background:#f7f7f7;border-radius:3px;margin:0;border:1px solid #c5c5c5}.frmb .form-elements .input-wrap{width:81.33333333%;margin-left:2%;float:left}.frmb .form-elements .input-wrap>input[type=checkbox]{margin-top:8px}.frmb .form-elements .add{clear:both}.frmb .form-elements input[type=text],.frmb .form-elements input[type=number],.frmb .form-elements input[type=color],.frmb .form-elements input[type=date],.frmb .form-elements select,.frmb .form-elements textarea{-webkit-transition:background 250ms ease-in-out;transition:background 250ms ease-in-out;padding:6px 12px;border:1px solid #c5c5c5;background-color:#fff}@media (max-width:481px){.frmb .form-elements .input-wrap{width:100%;margin-left:0;float:none}}.frmb .form-elements input[type=number]{width:auto}.frmb .form-elements .btn-group{margin-left:2%}.col-md-6 .frmb .form-elements .false-label,.col-md-6 .frmb .form-elements label,.col-md-8 .frmb .form-elements .false-label,.col-md-8 .frmb .form-elements label{display:block}.frmb .form-elements .false-label:first-child,.frmb .form-elements label:first-child{width:16.66666667%;padding-top:7px;margin-bottom:0;text-align:right;font-weight:700;float:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:capitalize}@media (max-width:481px){.frmb .form-elements .false-label:first-child,.frmb .form-elements label:first-child{display:block;width:auto;float:none;text-align:left}.frmb .form-elements .false-label:first-child.empty-label,.frmb .form-elements label:first-child.empty-label{display:none}}.frmb .form-elements .false-label.multiple,.frmb .form-elements .false-label.other-label,.frmb .form-elements .false-label.required-label,.frmb .form-elements .false-label.roles-label,.frmb .form-elements .false-label.toggle-label,.frmb .form-elements label.multiple,.frmb .form-elements label.other-label,.frmb .form-elements label.required-label,.frmb .form-elements label.roles-label,.frmb .form-elements label.toggle-label{text-align:left;float:none;margin-bottom:-3px;font-weight:400;width:calc(81.3333% - 23px)}.autocomplete-field .sortable-options .option-selected{display:none}.fb-mobile .field-actions{opacity:1}[tooltip]{position:relative}[tooltip]:hover:after{background:rgba(0,0,0,.9);border-radius:5px 5px 5px 0;bottom:23px;content:attr(tooltip);padding:10px 5px;position:absolute;z-index:98;left:2px;width:230px;text-shadow:none;line-height:1.5em}.form-wrap::after,.kc-toggle span::after,.kc-toggle span::before,[tooltip]:hover:before{content:''}[tooltip]:hover:before{border:solid;border-color:#222 transparent;border-width:6px 6px 0;bottom:17px;left:2px;position:absolute;z-index:99;cursor:default}.tooltip-element{visibility:visible;background:#000;width:16px;height:16px;border-radius:8px;display:inline-block;text-align:center;line-height:16px;margin:0 5px}.kc-toggle{padding-left:0!important}.kc-toggle span{position:relative;width:48px;height:24px;background:#e6e6e6;display:inline-block;border-radius:4px;border:1px solid #ccc;padding:2px;overflow:hidden;float:left;margin-right:5px}.kc-toggle span::after,.kc-toggle span::before{position:absolute;display:inline-block;top:0}.kc-toggle span::after{position:relative;width:50%;height:100%;left:0;border-radius:3px;background:-webkit-linear-gradient(top,#fff 0,#ccc 100%);background:linear-gradient(to bottom,#fff 0,#ccc 100%);border:1px solid #999;-webkit-transition:-webkit-transform 50ms;transition:-webkit-transform 50ms;transition:transform 50ms;transition:transform 50ms,-webkit-transform 50ms;-webkit-transform:translateX(0);transform:translateX(0)}.kc-toggle span::before{border-radius:4px;top:2px;left:2px;width:calc(100% - 4px);height:18px;box-shadow:0 0 1px 1px #b3b3b3 inset;background-color:transparent}.kc-toggle input{height:0;overflow:hidden;width:0;opacity:0;pointer-events:none;margin:0}.kc-toggle input:checked+span::after{-webkit-transform:translateX(100%);transform:translateX(100%)}.kc-toggle input:checked+span::before{background-color:#6fc665}.form-wrap{position:relative}.form-wrap::after{display:table;clear:both}.cb-wrap,.stage-wrap{vertical-align:top}.stage-wrap h4{margin-top:0;color:#666}.form-elements input.error{border:1px solid #c10000}.form-elements input.fld-maxlength{width:10%}.form-elements input.field-error{background:#fefefe;border:1px solid #c5c5c5}.form-elements label em{display:block;font-weight:400;font-size:.75em}.form-elements label.maxlength-label{line-height:1em}.form-elements .available-roles{display:none;padding:10px;margin:10px 0;background:#e6e6e6;box-shadow:inset 0 0 2px 0 #b3b3b3}@media (max-width:481px){.form-elements .available-roles{margin-left:0}}.form-elements .available-roles label{font-weight:400;width:auto;float:none;display:inline}.form-elements .available-roles input{display:inline;top:auto}.form-elements,.form-group,.multi-row span,textarea{display:block}.form-elements::after,.form-group::after{content:'.';display:block;height:0;clear:both;visibility:hidden}.form-elements .field-options div:hover,.frmb .legend,.frmb .prev-holder{cursor:move}.frmb-tt{display:none;position:absolute;top:0;left:0;border:1px solid #262626;background-color:#666;border-radius:5px;padding:5px;color:#fff;text-align:left;font-size:12px}.frmb-tt::after,.frmb-tt::before{content:'';position:absolute;border-style:solid;border-width:10px 10px 0;border-color:#666 transparent;display:block;width:0;z-index:1;margin-left:-10px;bottom:-10px;left:20px}.frmb-tt a{text-decoration:underline;color:#fff}.fb-mobile .frmb li .del-button,.fb-mobile .frmb li .toggle-form,.frmb li:hover .del-button,.frmb li:hover .toggle-form{opacity:1}.fresh .frmb .legend .element-info{display:inline-block;visibility:visible;line-height:12px;margin-left:6px}.frmb-xml .ui-dialog-content{white-space:pre-wrap;word-wrap:break-word;font-size:12px;padding:0 30px;margin-top:0}.toggle-form{margin-left:5px;opacity:0}.toggle-form:hover{border-color:#ccc}.toggle-form::before{margin:0}.formb-field-vars .copy-var{display:inline-block;width:24px;height:24px;background:#b3b3b3;text-indent:-9999px}.ui-button .ui-button-text{line-height:0}.form-builder-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);display:none;z-index:10}.form-builder-overlay.visible{display:block}.form-builder-dialog{position:absolute;border-radius:5px;background:#fff;z-index:20;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);top:0;left:0;padding:10px;box-shadow:0 3px 10px #000;min-width:166px}.form-builder-dialog h3{margin-top:0}.form-builder-dialog.data-dialog{width:65%;background-color:#23241f}.form-builder-dialog.data-dialog pre{background:0 0;border:0;box-shadow:none;margin:0;color:#f2f2f2}.form-builder-dialog.positioned{-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.form-builder-dialog.positioned .button-wrap::before{content:'';width:0;height:0;border-left:15px solid transparent;border-right:15px solid transparent;border-top:10px solid #fff;position:absolute;left:50%;top:100%;-webkit-transform:translate(-50%,10px);transform:translate(-50%,10px)}.form-builder-dialog .button-wrap{position:relative;margin-top:10px;text-align:right;clear:both}.form-builder-dialog .button-wrap .btn{margin-left:10px} \ No newline at end of file diff --git a/demo/assets/js/form-builder.js b/demo/assets/js/form-builder.js index e67c991bc..e57b6b640 100644 --- a/demo/assets/js/form-builder.js +++ b/demo/assets/js/form-builder.js @@ -4246,7 +4246,7 @@ var FormBuilder = function FormBuilder(opts, element) { var label = function label(txt) { return ''; }; - var checked = values[name] !== undefined ? 'checked' : ''; + var checked = values[name] ? 'checked' : ''; var input = ' '; var left = []; var right = [input]; @@ -7527,4 +7527,4 @@ utils.forceNumber = function (str) { exports.default = utils; },{"./dom":130,"babel-runtime/core-js/get-iterator":2,"babel-runtime/core-js/map":4,"babel-runtime/core-js/object/assign":5,"babel-runtime/helpers/objectWithoutProperties":14,"babel-runtime/helpers/slicedToArray":15,"babel-runtime/helpers/toConsumableArray":16,"babel-runtime/helpers/typeof":17}]},{},[132]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb20uanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2Zyb20uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2dldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fa2V5b2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21ldGEuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21pY3JvdGFzay5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdGFzay5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmlzLWl0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubWFwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvbWkxOG4vZGlzdC9taTE4bi5taW4uanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS1tb2R1bGUuanMiLCJub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwic3JjL2pzL2NvbmZpZy5qcyIsInNyYy9qcy9kYXRhLmpzIiwic3JjL2pzL2RvbS5qcyIsInNyYy9qcy9ldmVudHMuanMiLCJzcmMvanMvZm9ybS1idWlsZGVyLmpzIiwic3JjL2pzL2hlbHBlcnMuanMiLCJzcmMvanMvcG9seWZpbGxzLmpzIiwic3JjL2pzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7O0FDREE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7O0FDQUE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBOztBQ0ZBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU9BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBOztBQ0FBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QixDQUFWO0FBQ0EsUUFBSSxPQUFKLEVBQWE7QUFDWCxXQUFLLEtBQUwsQ0FBVyxPQUFYLEVBQW9CLElBQXBCO0FBQ0Q7QUFDRixHQWREO0FBZUQsQ0FqQkQ7O0FBbUJBOzs7OztBQUtBLE1BQU0sV0FBTixHQUFvQixZQUFNO0FBQ3hCLE1BQUksY0FBYyxFQUFsQjtBQUNBLEdBQUMsVUFBUyxDQUFULEVBQVk7QUFDWCxRQUFJLDJUQUEyVCxJQUEzVCxDQUFnVSxDQUFoVSxLQUFzVSwwa0RBQTBrRCxJQUExa0QsQ0FBK2tELEVBQUUsTUFBRixDQUFTLENBQVQsRUFBWSxDQUFaLENBQS9rRCxDQUExVSxFQUEwNkQ7QUFDeDZELG9CQUFjLFlBQWQ7QUFDRDtBQUNGLEdBSkQsRUFJRyxVQUFVLFNBQVYsSUFBdUIsVUFBVSxNQUFqQyxJQUEyQyxPQUFPLEtBSnJEO0FBS0EsU0FBTyxXQUFQO0FBQ0QsQ0FSRDs7QUFVQTs7Ozs7O0FBTUEsTUFBTSxhQUFOLEdBQXNCLGVBQU87QUFDM0IsU0FBTyxNQUFNLFVBQU4sQ0FBaUIsSUFBSSxPQUFKLENBQVksYUFBWixFQUEyQixFQUEzQixDQUFqQixDQUFQO0FBQ0QsQ0FGRDs7QUFJQTs7Ozs7O0FBTUEsTUFBTSxRQUFOLEdBQWlCLGVBQU87QUFDdEIsU0FBTyxJQUFJLE9BQUosQ0FBWSxLQUFaLEVBQW1CLEdBQW5CLEVBQXdCLE9BQXhCLENBQWdDLHNCQUFoQyxFQUF3RCxFQUF4RCxFQUE0RCxXQUE1RCxFQUFQO0FBQ0QsQ0FGRDs7QUFJQTs7Ozs7O0FBTUEsTUFBTSxXQUFOLEdBQW9CLGVBQU87QUFDekIsU0FBTyxJQUFJLE9BQUosQ0FBWSxTQUFaLEVBQXVCLEVBQXZCLENBQVA7QUFDRCxDQUZEOztrQkFJZSxLIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2dldC1pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9tYXBcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnblwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2VcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3Byb21pc2UgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9wcm9taXNlXCIpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnZW4gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBuZXcgX3Byb21pc2UyLmRlZmF1bHQoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gc3RlcChrZXksIGFyZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3RlcChcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHN0ZXAoXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGVwKFwibmV4dFwiKTtcbiAgICB9KTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZpbmVQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAob2JqLCBrZXlzKSB7XG4gIHZhciB0YXJnZXQgPSB7fTtcblxuICBmb3IgKHZhciBpIGluIG9iaikge1xuICAgIGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7XG4gICAgdGFyZ2V0W2ldID0gb2JqW2ldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfaXNJdGVyYWJsZTIgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9pcy1pdGVyYWJsZVwiKTtcblxudmFyIF9pc0l0ZXJhYmxlMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzSXRlcmFibGUyKTtcblxudmFyIF9nZXRJdGVyYXRvcjIgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9nZXQtaXRlcmF0b3JcIik7XG5cbnZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SXRlcmF0b3IyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkge1xuICAgIHZhciBfYXJyID0gW107XG4gICAgdmFyIF9uID0gdHJ1ZTtcbiAgICB2YXIgX2QgPSBmYWxzZTtcbiAgICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgX2kgPSAoMCwgX2dldEl0ZXJhdG9yMy5kZWZhdWx0KShhcnIpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gdHJ1ZTtcbiAgICAgIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gX2FycjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXNJdGVyYWJsZTMuZGVmYXVsdCkoT2JqZWN0KGFycikpKSB7XG4gICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICB9XG4gIH07XG59KCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZnJvbSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL2FycmF5L2Zyb21cIik7XG5cbnZhciBfZnJvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mcm9tKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgYXJyMltpXSA9IGFycltpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKDAsIF9mcm9tMi5kZWZhdWx0KShhcnIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2l0ZXJhdG9yID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yXCIpO1xuXG52YXIgX2l0ZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2l0ZXJhdG9yKTtcblxudmFyIF9zeW1ib2wgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9zeW1ib2xcIik7XG5cbnZhciBfc3ltYm9sMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N5bWJvbCk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgX2l0ZXJhdG9yMi5kZWZhdWx0ID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZihfaXRlcmF0b3IyLmRlZmF1bHQpID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59IDogZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLkFycmF5LmZyb207IiwicmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvcicpOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvY29yZS5pcy1pdGVyYWJsZScpOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5tYXAnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKS5NYXA7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmFzc2lnbjsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2Mpe1xuICByZXR1cm4gJE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5rZXlzOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKS5Qcm9taXNlOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuU3ltYm9sOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX3drcy1leHQnKS5mKCdpdGVyYXRvcicpOyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICBpZih0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpe1xuICBpZighKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSl7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59OyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKCFpc09iamVjdChpdCkpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59OyIsInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXIsIElURVJBVE9SKXtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9MZW5ndGggID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCB0b0luZGV4ICAgPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihJU19JTkNMVURFUyl7XG4gIHJldHVybiBmdW5jdGlvbigkdGhpcywgZWwsIGZyb21JbmRleCl7XG4gICAgdmFyIE8gICAgICA9IHRvSU9iamVjdCgkdGhpcylcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IHRvSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpXG4gICAgICAsIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICBpZihJU19JTkNMVURFUyAmJiBlbCAhPSBlbCl3aGlsZShsZW5ndGggPiBpbmRleCl7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICBpZih2YWx1ZSAhPSB2YWx1ZSlyZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSN0b0luZGV4IGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvcig7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspaWYoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTyl7XG4gICAgICBpZihPW2luZGV4XSA9PT0gZWwpcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTsiLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIElPYmplY3QgID0gcmVxdWlyZSgnLi9faW9iamVjdCcpXG4gICwgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCBhc2MgICAgICA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFRZUEUsICRjcmVhdGUpe1xuICB2YXIgSVNfTUFQICAgICAgICA9IFRZUEUgPT0gMVxuICAgICwgSVNfRklMVEVSICAgICA9IFRZUEUgPT0gMlxuICAgICwgSVNfU09NRSAgICAgICA9IFRZUEUgPT0gM1xuICAgICwgSVNfRVZFUlkgICAgICA9IFRZUEUgPT0gNFxuICAgICwgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNlxuICAgICwgTk9fSE9MRVMgICAgICA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYXG4gICAgLCBjcmVhdGUgICAgICAgID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbigkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCl7XG4gICAgdmFyIE8gICAgICA9IHRvT2JqZWN0KCR0aGlzKVxuICAgICAgLCBzZWxmICAgPSBJT2JqZWN0KE8pXG4gICAgICAsIGYgICAgICA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKVxuICAgICAgLCBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aClcbiAgICAgICwgaW5kZXggID0gMFxuICAgICAgLCByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkXG4gICAgICAsIHZhbCwgcmVzO1xuICAgIGZvcig7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspaWYoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZil7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZihUWVBFKXtcbiAgICAgICAgaWYoSVNfTUFQKXJlc3VsdFtpbmRleF0gPSByZXM7ICAgICAgICAgICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYocmVzKXN3aXRjaChUWVBFKXtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmKElTX0VWRVJZKXJldHVybiBmYWxzZTsgICAgICAgICAgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBpc0FycmF5ICA9IHJlcXVpcmUoJy4vX2lzLWFycmF5JylcbiAgLCBTUEVDSUVTICA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3JpZ2luYWwpe1xuICB2YXIgQztcbiAgaWYoaXNBcnJheShvcmlnaW5hbCkpe1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSlDID0gdW5kZWZpbmVkO1xuICAgIGlmKGlzT2JqZWN0KEMpKXtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYoQyA9PT0gbnVsbClDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTsiLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsLCBsZW5ndGgpe1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTsiLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpXG4gICwgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJylcbiAgLy8gRVMzIHdyb25nIGhlcmVcbiAgLCBBUkcgPSBjb2YoZnVuY3Rpb24oKXsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbihpdCwga2V5KXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59OyIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZlxuICAsIGNyZWF0ZSAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpXG4gICwgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKVxuICAsIGN0eCAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBhbkluc3RhbmNlICA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJylcbiAgLCBkZWZpbmVkICAgICA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKVxuICAsIGZvck9mICAgICAgID0gcmVxdWlyZSgnLi9fZm9yLW9mJylcbiAgLCAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJylcbiAgLCBzdGVwICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpXG4gICwgc2V0U3BlY2llcyAgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpXG4gICwgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpXG4gICwgZmFzdEtleSAgICAgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleVxuICAsIFNJWkUgICAgICAgID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbih0aGF0LCBrZXkpe1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpLCBlbnRyeTtcbiAgaWYoaW5kZXggIT09ICdGJylyZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKXtcbiAgICBpZihlbnRyeS5rID09IGtleSlyZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24od3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUil7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRoYXQsIGl0ZXJhYmxlKXtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmKGl0ZXJhYmxlICE9IHVuZGVmaW5lZClmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKXtcbiAgICAgICAgZm9yKHZhciB0aGF0ID0gdGhpcywgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubil7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYoZW50cnkucCllbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbihrZXkpe1xuICAgICAgICB2YXIgdGhhdCAgPSB0aGlzXG4gICAgICAgICAgLCBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmKGVudHJ5KXtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5cbiAgICAgICAgICAgICwgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYocHJldilwcmV2Lm4gPSBuZXh0O1xuICAgICAgICAgIGlmKG5leHQpbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZih0aGF0Ll9mID09IGVudHJ5KXRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmKHRoYXQuX2wgPT0gZW50cnkpdGhhdC5fbCA9IHByZXY7XG4gICAgICAgICAgdGhhdFtTSVpFXS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyosIHRoYXQgPSB1bmRlZmluZWQgKi8pe1xuICAgICAgICBhbkluc3RhbmNlKHRoaXMsIEMsICdmb3JFYWNoJyk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKVxuICAgICAgICAgICwgZW50cnk7XG4gICAgICAgIHdoaWxlKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZil7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZShlbnRyeSAmJiBlbnRyeS5yKWVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KXtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZihERVNDUklQVE9SUylkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiBkZWZpbmVkKHRoaXNbU0laRV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uKHRoYXQsIGtleSwgdmFsdWUpe1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSlcbiAgICAgICwgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYoZW50cnkpe1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYoIXRoYXQuX2YpdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYocHJldilwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYoaW5kZXggIT09ICdGJyl0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbihDLCBOQU1FLCBJU19NQVApe1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbihpdGVyYXRlZCwga2luZCl7XG4gICAgICB0aGlzLl90ID0gaXRlcmF0ZWQ7ICAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7IC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24oKXtcbiAgICAgIHZhciB0aGF0ICA9IHRoaXNcbiAgICAgICAgLCBraW5kICA9IHRoYXQuX2tcbiAgICAgICAgLCBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlKGVudHJ5ICYmIGVudHJ5LnIpZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpe1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZihraW5kID09ICd2YWx1ZXMnKXJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJyAsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59OyIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgZnJvbSAgICA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTkFNRSl7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKXtcbiAgICBpZihjbGFzc29mKHRoaXMpICE9IE5BTUUpdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgbWV0YSAgICAgICAgICAgPSByZXF1aXJlKCcuL19tZXRhJylcbiAgLCBmYWlscyAgICAgICAgICA9IHJlcXVpcmUoJy4vX2ZhaWxzJylcbiAgLCBoaWRlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIHJlZGVmaW5lQWxsICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJylcbiAgLCBmb3JPZiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2Zvci1vZicpXG4gICwgYW5JbnN0YW5jZSAgICAgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpXG4gICwgaXNPYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIGRQICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZlxuICAsIGVhY2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApXG4gICwgREVTQ1JJUFRPUlMgICAgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKXtcbiAgdmFyIEJhc2UgID0gZ2xvYmFsW05BTUVdXG4gICAgLCBDICAgICA9IEJhc2VcbiAgICAsIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJ1xuICAgICwgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlXG4gICAgLCBPICAgICA9IHt9O1xuICBpZighREVTQ1JJUFRPUlMgfHwgdHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24oKXtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSl7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRhcmdldCwgaXRlcmFibGUpe1xuICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUsICdfYycpO1xuICAgICAgdGFyZ2V0Ll9jID0gbmV3IEJhc2U7XG4gICAgICBpZihpdGVyYWJsZSAhPSB1bmRlZmluZWQpZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGFyZ2V0W0FEREVSXSwgdGFyZ2V0KTtcbiAgICB9KTtcbiAgICBlYWNoKCdhZGQsY2xlYXIsZGVsZXRlLGZvckVhY2gsZ2V0LGhhcyxzZXQsa2V5cyx2YWx1ZXMsZW50cmllcyx0b0pTT04nLnNwbGl0KCcsJyksZnVuY3Rpb24oS0VZKXtcbiAgICAgIHZhciBJU19BRERFUiA9IEtFWSA9PSAnYWRkJyB8fCBLRVkgPT0gJ3NldCc7XG4gICAgICBpZihLRVkgaW4gcHJvdG8gJiYgIShJU19XRUFLICYmIEtFWSA9PSAnY2xlYXInKSloaWRlKEMucHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgICBhbkluc3RhbmNlKHRoaXMsIEMsIEtFWSk7XG4gICAgICAgIGlmKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSlyZXR1cm4gS0VZID09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9jW0tFWV0oYSA9PT0gMCA/IDAgOiBhLCBiKTtcbiAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmKCdzaXplJyBpbiBwcm90bylkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiB0aGlzLl9jLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYsIE8pO1xuXG4gIGlmKCFJU19XRUFLKWNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07IiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHt2ZXJzaW9uOiAnMi40LjAnfTtcbmlmKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGNyZWF0ZURlc2MgICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIGluZGV4LCB2YWx1ZSl7XG4gIGlmKGluZGV4IGluIG9iamVjdCkkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTsiLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCB0aGF0LCBsZW5ndGgpe1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZih0aGF0ID09PSB1bmRlZmluZWQpcmV0dXJuIGZuO1xuICBzd2l0Y2gobGVuZ3RoKXtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbihhKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24oYSwgYil7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKGEsIGIsIGMpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oLyogLi4uYXJncyAqLyl7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59OyIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTsiLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywge2dldDogZnVuY3Rpb24oKXsgcmV0dXJuIDc7IH19KS5hICE9IDc7XG59KTsiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnRcbiAgLy8gaW4gb2xkIElFIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnXG4gICwgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07IiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7IiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIGdPUFMgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpXG4gICwgcElFICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgcmVzdWx0ICAgICA9IGdldEtleXMoaXQpXG4gICAgLCBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZihnZXRTeW1ib2xzKXtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpXG4gICAgICAsIGlzRW51bSAgPSBwSUUuZlxuICAgICAgLCBpICAgICAgID0gMFxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUoc3ltYm9scy5sZW5ndGggPiBpKWlmKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKXJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07IiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgY3R4ICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBoaWRlICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBzb3VyY2Upe1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRlxuICAgICwgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuR1xuICAgICwgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuU1xuICAgICwgSVNfUFJPVE8gID0gdHlwZSAmICRleHBvcnQuUFxuICAgICwgSVNfQklORCAgID0gdHlwZSAmICRleHBvcnQuQlxuICAgICwgSVNfV1JBUCAgID0gdHlwZSAmICRleHBvcnQuV1xuICAgICwgZXhwb3J0cyAgID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSlcbiAgICAsIGV4cFByb3RvICA9IGV4cG9ydHNbUFJPVE9UWVBFXVxuICAgICwgdGFyZ2V0ICAgID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXVxuICAgICwga2V5LCBvd24sIG91dDtcbiAgaWYoSVNfR0xPQkFMKXNvdXJjZSA9IG5hbWU7XG4gIGZvcihrZXkgaW4gc291cmNlKXtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmKG93biAmJiBrZXkgaW4gZXhwb3J0cyljb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uKEMpe1xuICAgICAgdmFyIEYgPSBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgICAgaWYodGhpcyBpbnN0YW5jZW9mIEMpe1xuICAgICAgICAgIHN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZihJU19QUk9UTyl7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSloaWRlKGV4cFByb3RvLCBrZXksIG91dCk7XG4gICAgfVxuICB9XG59O1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YCBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTsiLCJ2YXIgY3R4ICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIGNhbGwgICAgICAgID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJylcbiAgLCBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKVxuICAsIGFuT2JqZWN0ICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCB0b0xlbmd0aCAgICA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgZ2V0SXRlckZuICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpXG4gICwgQlJFQUsgICAgICAgPSB7fVxuICAsIFJFVFVSTiAgICAgID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUil7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uKCl7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSlcbiAgICAsIGYgICAgICA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKVxuICAgICwgaW5kZXggID0gMFxuICAgICwgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZih0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZihpc0FycmF5SXRlcihpdGVyRm4pKWZvcihsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvcihpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyApe1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07IiwidmFyIGRQICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OyIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7IiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCBhcmdzLCB0aGF0KXtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2goYXJncy5sZW5ndGgpe1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncyk7XG59OyIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59OyIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCBJVEVSQVRPUiAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07IiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZyl7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07IiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpe1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2goZSl7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZihyZXQgIT09IHVuZGVmaW5lZClhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpXG4gICwgZGVzY3JpcHRvciAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KXtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7bmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KX0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgICAgICAgID0gcmVxdWlyZSgnLi9fbGlicmFyeScpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKVxuICAsIGhpZGUgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIEl0ZXJhdG9ycyAgICAgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCAkaXRlckNyZWF0ZSAgICA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKVxuICAsIElURVJBVE9SICAgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBCVUdHWSAgICAgICAgICA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKSAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gICwgRkZfSVRFUkFUT1IgICAgPSAnQEBpdGVyYXRvcidcbiAgLCBLRVlTICAgICAgICAgICA9ICdrZXlzJ1xuICAsIFZBTFVFUyAgICAgICAgID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKXtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24oa2luZCl7XG4gICAgaWYoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaChraW5kKXtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHICAgICAgICA9IE5BTUUgKyAnIEl0ZXJhdG9yJ1xuICAgICwgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTXG4gICAgLCBWQUxVRVNfQlVHID0gZmFsc2VcbiAgICAsIHByb3RvICAgICAgPSBCYXNlLnByb3RvdHlwZVxuICAgICwgJG5hdGl2ZSAgICA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXVxuICAgICwgJGRlZmF1bHQgICA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpXG4gICAgLCAkZW50cmllcyAgID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZFxuICAgICwgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmVcbiAgICAsIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYoJGFueU5hdGl2ZSl7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UpKTtcbiAgICBpZihJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSl7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYoIUxJQlJBUlkgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKWhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZihERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpe1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKXtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddICA9IHJldHVyblRoaXM7XG4gIGlmKERFRkFVTFQpe1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6ICBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6ICAgIElTX1NFVCAgICAgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZihGT1JDRUQpZm9yKGtleSBpbiBtZXRob2RzKXtcbiAgICAgIGlmKCEoa2V5IGluIHByb3RvKSlyZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59OyIsInZhciBJVEVSQVRPUiAgICAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uKCl7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uKCl7IHRocm93IDI7IH0pO1xufSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMsIHNraXBDbG9zaW5nKXtcbiAgaWYoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgID0gWzddXG4gICAgICAsIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24oKXsgcmV0dXJuIHtkb25lOiBzYWZlID0gdHJ1ZX07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uKCl7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkb25lLCB2YWx1ZSl7XG4gIHJldHVybiB7dmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmV9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHt9OyIsInZhciBnZXRLZXlzICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIGVsKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBrZXlzICAgPSBnZXRLZXlzKE8pXG4gICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICwgaW5kZXggID0gMFxuICAgICwga2V5O1xuICB3aGlsZShsZW5ndGggPiBpbmRleClpZihPW2tleSA9IGtleXNbaW5kZXgrK11dID09PSBlbClyZXR1cm4ga2V5O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7IiwidmFyIE1FVEEgICAgID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKVxuICAsIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBoYXMgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgc2V0RGVzYyAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgaWQgICAgICAgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24oaXQpe1xuICBzZXREZXNjKGl0LCBNRVRBLCB7dmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9fSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbihpdCwgY3JlYXRlKXtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZighaXNPYmplY3QoaXQpKXJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmKCFoYXMoaXQsIE1FVEEpKXtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZighY3JlYXRlKXJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24oaXQsIGNyZWF0ZSl7XG4gIGlmKCFoYXMoaXQsIE1FVEEpKXtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYoIWNyZWF0ZSlyZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKXNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiAgICAgIE1FVEEsXG4gIE5FRUQ6ICAgICBmYWxzZSxcbiAgZmFzdEtleTogIGZhc3RLZXksXG4gIGdldFdlYWs6ICBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07IiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldFxuICAsIE9ic2VydmVyICA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyXG4gICwgcHJvY2VzcyAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBQcm9taXNlICAgPSBnbG9iYWwuUHJvbWlzZVxuICAsIGlzTm9kZSAgICA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpe1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZShoZWFkKXtcbiAgICAgIGZuICAgPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoKGUpe1xuICAgICAgICBpZihoZWFkKW5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmKHBhcmVudClwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmKGlzTm9kZSl7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlclxuICB9IGVsc2UgaWYoT2JzZXJ2ZXIpe1xuICAgIHZhciB0b2dnbGUgPSB0cnVlXG4gICAgICAsIG5vZGUgICA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpe1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGZuKXtcbiAgICB2YXIgdGFzayA9IHtmbjogZm4sIG5leHQ6IHVuZGVmaW5lZH07XG4gICAgaWYobGFzdClsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmKCFoZWFkKXtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIGdldEtleXMgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIGdPUFMgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKVxuICAsIHBJRSAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpXG4gICwgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIElPYmplY3QgID0gcmVxdWlyZSgnLi9faW9iamVjdCcpXG4gICwgJGFzc2lnbiAgPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICB2YXIgQSA9IHt9XG4gICAgLCBCID0ge31cbiAgICAsIFMgPSBTeW1ib2woKVxuICAgICwgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uKGspeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUICAgICA9IHRvT2JqZWN0KHRhcmdldClcbiAgICAsIGFMZW4gID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgaW5kZXggPSAxXG4gICAgLCBnZXRTeW1ib2xzID0gZ09QUy5mXG4gICAgLCBpc0VudW0gICAgID0gcElFLmY7XG4gIHdoaWxlKGFMZW4gPiBpbmRleCl7XG4gICAgdmFyIFMgICAgICA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKVxuICAgICAgLCBrZXlzICAgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpXG4gICAgICAsIGxlbmd0aCA9IGtleXMubGVuZ3RoXG4gICAgICAsIGogICAgICA9IDBcbiAgICAgICwga2V5O1xuICAgIHdoaWxlKGxlbmd0aCA+IGopaWYoaXNFbnVtLmNhbGwoUywga2V5ID0ga2V5c1tqKytdKSlUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjsiLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgZFBzICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJylcbiAgLCBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKVxuICAsIElFX1BST1RPICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpXG4gICwgRW1wdHkgICAgICAgPSBmdW5jdGlvbigpeyAvKiBlbXB0eSAqLyB9XG4gICwgUFJPVE9UWVBFICAgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbigpe1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKVxuICAgICwgaSAgICAgID0gZW51bUJ1Z0tleXMubGVuZ3RoXG4gICAgLCBsdCAgICAgPSAnPCdcbiAgICAsIGd0ICAgICA9ICc+J1xuICAgICwgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUoaS0tKWRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKXtcbiAgdmFyIHJlc3VsdDtcbiAgaWYoTyAhPT0gbnVsbCl7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBkUCAgICAgICAgICAgICA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpe1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgaWYoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKXRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmKCd2YWx1ZScgaW4gQXR0cmlidXRlcylPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59OyIsInZhciBkUCAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGdldEtleXMgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpe1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgICA9IGdldEtleXMoUHJvcGVydGllcylcbiAgICAsIGxlbmd0aCA9IGtleXMubGVuZ3RoXG4gICAgLCBpID0gMFxuICAgICwgUDtcbiAgd2hpbGUobGVuZ3RoID4gaSlkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07IiwidmFyIHBJRSAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpXG4gICwgY3JlYXRlRGVzYyAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJylcbiAgLCB0b0lPYmplY3QgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpXG4gICwgZ09QRCAgICAgICAgICAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKXtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZihJRThfRE9NX0RFRklORSl0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIGlmKGhhcyhPLCBQKSlyZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59OyIsIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCBnT1BOICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmZcbiAgLCB0b1N0cmluZyAgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uKGl0KXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KXtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJylcbiAgLCBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pe1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59OyIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7IiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgdG9PYmplY3QgICAgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIElFX1BST1RPICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpXG4gICwgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbihPKXtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZihoYXMoTywgSUVfUFJPVE8pKXJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcil7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTsiLCJ2YXIgaGFzICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b0lPYmplY3QgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKVxuICAsIElFX1BST1RPICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIG5hbWVzKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwga2V5O1xuICBmb3Ioa2V5IGluIE8paWYoa2V5ICE9IElFX1BST1RPKWhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZihoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpe1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07IiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07IiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7IiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgY29yZSAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIGZhaWxzICAgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihLRVksIGV4ZWMpe1xuICB2YXIgZm4gID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldXG4gICAgLCBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbigpeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGJpdG1hcCwgdmFsdWUpe1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGUgIDogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGUgICAgOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlICAgICAgIDogdmFsdWVcbiAgfTtcbn07IiwidmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHRhcmdldCwgc3JjLCBzYWZlKXtcbiAgZm9yKHZhciBrZXkgaW4gc3JjKXtcbiAgICBpZihzYWZlICYmIHRhcmdldFtrZXldKXRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBoaWRlKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19oaWRlJyk7IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIGRQICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJylcbiAgLCBTUEVDSUVTICAgICA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZKXtcbiAgdmFyIEMgPSB0eXBlb2YgY29yZVtLRVldID09ICdmdW5jdGlvbicgPyBjb3JlW0tFWV0gOiBnbG9iYWxbS0VZXTtcbiAgaWYoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSlkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07IiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBoYXMgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCB0YWcsIHN0YXQpe1xuICBpZihpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKWRlZihpdCwgVEFHLCB7Y29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnfSk7XG59OyIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpXG4gICwgdWlkICAgID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59OyIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nXG4gICwgc3RvcmUgID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihrZXkpe1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHt9KTtcbn07IiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJylcbiAgLCBTUEVDSUVTICAgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihPLCBEKXtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvciwgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTsiLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgZGVmaW5lZCAgID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oVE9fU1RSSU5HKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoYXQsIHBvcyl7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSlcbiAgICAgICwgaSA9IHRvSW50ZWdlcihwb3MpXG4gICAgICAsIGwgPSBzLmxlbmd0aFxuICAgICAgLCBhLCBiO1xuICAgIGlmKGkgPCAwIHx8IGkgPj0gbClyZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTsiLCJ2YXIgY3R4ICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBpbnZva2UgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19pbnZva2UnKVxuICAsIGh0bWwgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2h0bWwnKVxuICAsIGNlbCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKVxuICAsIGdsb2JhbCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBzZXRUYXNrICAgICAgICAgICAgPSBnbG9iYWwuc2V0SW1tZWRpYXRlXG4gICwgY2xlYXJUYXNrICAgICAgICAgID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlXG4gICwgTWVzc2FnZUNoYW5uZWwgICAgID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsXG4gICwgY291bnRlciAgICAgICAgICAgID0gMFxuICAsIHF1ZXVlICAgICAgICAgICAgICA9IHt9XG4gICwgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSdcbiAgLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbigpe1xuICB2YXIgaWQgPSArdGhpcztcbiAgaWYocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKXtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQpe1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZighc2V0VGFzayB8fCAhY2xlYXJUYXNrKXtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbil7XG4gICAgdmFyIGFyZ3MgPSBbXSwgaSA9IDE7XG4gICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24oKXtcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCl7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJyl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYoTWVzc2FnZUNoYW5uZWwpe1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7XG4gICAgcG9ydCAgICA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZihnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKXtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiAgIHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07IiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIG1heCAgICAgICA9IE1hdGgubWF4XG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGluZGV4LCBsZW5ndGgpe1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTsiLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsICA9IE1hdGguY2VpbFxuICAsIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07IiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTsiLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTsiLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07IiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgUyl7XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZih0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07IiwidmFyIGlkID0gMFxuICAsIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07IiwidmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIExJQlJBUlkgICAgICAgID0gcmVxdWlyZSgnLi9fbGlicmFyeScpXG4gICwgd2tzRXh0ICAgICAgICAgPSByZXF1aXJlKCcuL193a3MtZXh0JylcbiAgLCBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG5hbWUpe1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZihuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKWRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHt2YWx1ZTogd2tzRXh0LmYobmFtZSl9KTtcbn07IiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7IiwidmFyIHN0b3JlICAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJylcbiAgLCB1aWQgICAgICAgID0gcmVxdWlyZSgnLi9fdWlkJylcbiAgLCBTeW1ib2wgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sXG4gICwgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7IiwidmFyIGNsYXNzb2YgICA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKVxuICAsIElURVJBVE9SICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgIT0gdW5kZWZpbmVkKXJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07IiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBnZXQgICAgICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvciA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIGl0ZXJGbiA9IGdldChpdCk7XG4gIGlmKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgcmV0dXJuIGFuT2JqZWN0KGl0ZXJGbi5jYWxsKGl0KSk7XG59OyIsInZhciBjbGFzc29mICAgPSByZXF1aXJlKCcuL19jbGFzc29mJylcbiAgLCBJVEVSQVRPUiAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIE8gPSBPYmplY3QoaXQpO1xuICByZXR1cm4gT1tJVEVSQVRPUl0gIT09IHVuZGVmaW5lZFxuICAgIHx8ICdAQGl0ZXJhdG9yJyBpbiBPXG4gICAgfHwgSXRlcmF0b3JzLmhhc093blByb3BlcnR5KGNsYXNzb2YoTykpO1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCB0b09iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgY2FsbCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKVxuICAsIGlzQXJyYXlJdGVyICAgID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpXG4gICwgdG9MZW5ndGggICAgICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5JylcbiAgLCBnZXRJdGVyRm4gICAgICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24oaXRlcil7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UvKiwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQqLyl7XG4gICAgdmFyIE8gICAgICAgPSB0b09iamVjdChhcnJheUxpa2UpXG4gICAgICAsIEMgICAgICAgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5XG4gICAgICAsIGFMZW4gICAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAsIG1hcGZuICAgPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICAgLCBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZFxuICAgICAgLCBpbmRleCAgID0gMFxuICAgICAgLCBpdGVyRm4gID0gZ2V0SXRlckZuKE8pXG4gICAgICAsIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZihtYXBwaW5nKW1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpe1xuICAgICAgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4Kyspe1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvcihyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpXG4gICwgc3RlcCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpXG4gICwgSXRlcmF0b3JzICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgdG9JT2JqZWN0ICAgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbihpdGVyYXRlZCwga2luZCl7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24oKXtcbiAgdmFyIE8gICAgID0gdGhpcy5fdFxuICAgICwga2luZCAgPSB0aGlzLl9rXG4gICAgLCBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpe1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYoa2luZCA9PSAna2V5cycgIClyZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmKGtpbmQgPT0gJ3ZhbHVlcycpcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpOyIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyAyMy4xIE1hcCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKSgnTWFwJywgZnVuY3Rpb24oZ2V0KXtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpe1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKXtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7IiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0Jywge2Fzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpfSk7IiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0Jywge2RlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mfSk7IiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsICRrZXlzICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpe1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7IiwiIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsIGdsb2JhbCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY3R4ICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBjbGFzc29mICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jbGFzc29mJylcbiAgLCAkZXhwb3J0ICAgICAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGlzT2JqZWN0ICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgYUZ1bmN0aW9uICAgICAgICAgID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpXG4gICwgYW5JbnN0YW5jZSAgICAgICAgID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKVxuICAsIGZvck9mICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2Zvci1vZicpXG4gICwgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpXG4gICwgdGFzayAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldFxuICAsIG1pY3JvdGFzayAgICAgICAgICA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKClcbiAgLCBQUk9NSVNFICAgICAgICAgICAgPSAnUHJvbWlzZSdcbiAgLCBUeXBlRXJyb3IgICAgICAgICAgPSBnbG9iYWwuVHlwZUVycm9yXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCAkUHJvbWlzZSAgICAgICAgICAgPSBnbG9iYWxbUFJPTUlTRV1cbiAgLCBwcm9jZXNzICAgICAgICAgICAgPSBnbG9iYWwucHJvY2Vzc1xuICAsIGlzTm9kZSAgICAgICAgICAgICA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnXG4gICwgZW1wdHkgICAgICAgICAgICAgID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfVxuICAsIEludGVybmFsLCBHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbigpe1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlICAgICA9ICRQcm9taXNlLnJlc29sdmUoMSlcbiAgICAgICwgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uKGV4ZWMpeyBleGVjKGVtcHR5LCBlbXB0eSk7IH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJykgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBzYW1lQ29uc3RydWN0b3IgPSBmdW5jdGlvbihhLCBiKXtcbiAgLy8gd2l0aCBsaWJyYXJ5IHdyYXBwZXIgc3BlY2lhbCBjYXNlXG4gIHJldHVybiBhID09PSBiIHx8IGEgPT09ICRQcm9taXNlICYmIGIgPT09IFdyYXBwZXI7XG59O1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbihpdCl7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24oQyl7XG4gIHJldHVybiBzYW1lQ29uc3RydWN0b3IoJFByb21pc2UsIEMpXG4gICAgPyBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICA6IG5ldyBHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24oQyl7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uKCQkcmVzb2x2ZSwgJCRyZWplY3Qpe1xuICAgIGlmKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ICA9IGFGdW5jdGlvbihyZWplY3QpO1xufTtcbnZhciBwZXJmb3JtID0gZnVuY3Rpb24oZXhlYyl7XG4gIHRyeSB7XG4gICAgZXhlYygpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB7ZXJyb3I6IGV9O1xuICB9XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uKHByb21pc2UsIGlzUmVqZWN0KXtcbiAgaWYocHJvbWlzZS5fbilyZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24oKXtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92XG4gICAgICAsIG9rICAgID0gcHJvbWlzZS5fcyA9PSAxXG4gICAgICAsIGkgICAgID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24ocmVhY3Rpb24pe1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbFxuICAgICAgICAsIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlXG4gICAgICAgICwgcmVqZWN0ICA9IHJlYWN0aW9uLnJlamVjdFxuICAgICAgICAsIGRvbWFpbiAgPSByZWFjdGlvbi5kb21haW5cbiAgICAgICAgLCByZXN1bHQsIHRoZW47XG4gICAgICB0cnkge1xuICAgICAgICBpZihoYW5kbGVyKXtcbiAgICAgICAgICBpZighb2spe1xuICAgICAgICAgICAgaWYocHJvbWlzZS5faCA9PSAyKW9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGhhbmRsZXIgPT09IHRydWUpcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZihkb21haW4pZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTtcbiAgICAgICAgICAgIGlmKGRvbWFpbilkb21haW4uZXhpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2Upe1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSl7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUoY2hhaW4ubGVuZ3RoID4gaSlydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZihpc1JlamVjdCAmJiAhcHJvbWlzZS5faClvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24ocHJvbWlzZSl7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uKCl7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdlxuICAgICAgLCBhYnJ1cHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYoaXNVbmhhbmRsZWQocHJvbWlzZSkpe1xuICAgICAgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgICBpZihpc05vZGUpe1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbil7XG4gICAgICAgICAgaGFuZGxlcih7cHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZX0pO1xuICAgICAgICB9IGVsc2UgaWYoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcil7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmKGFicnVwdCl0aHJvdyBhYnJ1cHQuZXJyb3I7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICBpZihwcm9taXNlLl9oID09IDEpcmV0dXJuIGZhbHNlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9hIHx8IHByb21pc2UuX2NcbiAgICAsIGkgICAgID0gMFxuICAgICwgcmVhY3Rpb247XG4gIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpe1xuICAgIHJlYWN0aW9uID0gY2hhaW5baSsrXTtcbiAgICBpZihyZWFjdGlvbi5mYWlsIHx8ICFpc1VuaGFuZGxlZChyZWFjdGlvbi5wcm9taXNlKSlyZXR1cm4gZmFsc2U7XG4gIH0gcmV0dXJuIHRydWU7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24ocHJvbWlzZSl7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uKCl7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYoaXNOb2RlKXtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZihoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCl7XG4gICAgICBoYW5kbGVyKHtwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3Z9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24odmFsdWUpe1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmKHByb21pc2UuX2QpcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmKCFwcm9taXNlLl9hKXByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbih2YWx1ZSl7XG4gIHZhciBwcm9taXNlID0gdGhpc1xuICAgICwgdGhlbjtcbiAgaWYocHJvbWlzZS5fZClyZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZihwcm9taXNlID09PSB2YWx1ZSl0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZih0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpe1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciB3cmFwcGVyID0ge193OiBwcm9taXNlLCBfZDogZmFsc2V9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2goZSl7XG4gICAgJHJlamVjdC5jYWxsKHtfdzogcHJvbWlzZSwgX2Q6IGZhbHNlfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmKCFVU0VfTkFUSVZFKXtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKXtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaChlcnIpe1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3Ipe1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG4gICAgICB2YXIgcmVhY3Rpb24gICAgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rICAgICA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCAgID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYodGhpcy5fYSl0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYodGhpcy5fcylub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpe1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24oKXtcbiAgICB2YXIgcHJvbWlzZSAgPSBuZXcgSW50ZXJuYWw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ICA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwge1Byb21pc2U6ICRQcm9taXNlfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpe1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcylcbiAgICAgICwgJCRyZWplY3QgICA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCl7XG4gICAgLy8gaW5zdGFuY2VvZiBpbnN0ZWFkIG9mIGludGVybmFsIHNsb3QgY2hlY2sgYmVjYXVzZSB3ZSBzaG91bGQgZml4IGl0IHdpdGhvdXQgcmVwbGFjZW1lbnQgbmF0aXZlIFByb21pc2UgY29yZVxuICAgIGlmKHggaW5zdGFuY2VvZiAkUHJvbWlzZSAmJiBzYW1lQ29uc3RydWN0b3IoeC5jb25zdHJ1Y3RvciwgdGhpcykpcmV0dXJuIHg7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKVxuICAgICAgLCAkJHJlc29sdmUgID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgICQkcmVzb2x2ZSh4KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24oaXRlcil7XG4gICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKXtcbiAgICB2YXIgQyAgICAgICAgICA9IHRoaXNcbiAgICAgICwgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICAsIHJlc29sdmUgICAgPSBjYXBhYmlsaXR5LnJlc29sdmVcbiAgICAgICwgcmVqZWN0ICAgICA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciBhYnJ1cHQgPSBwZXJmb3JtKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgdmFsdWVzICAgID0gW11cbiAgICAgICAgLCBpbmRleCAgICAgPSAwXG4gICAgICAgICwgcmVtYWluaW5nID0gMTtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24ocHJvbWlzZSl7XG4gICAgICAgIHZhciAkaW5kZXggICAgICAgID0gaW5kZXgrK1xuICAgICAgICAgICwgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgICAgICAgIGlmKGFscmVhZHlDYWxsZWQpcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmKGFicnVwdClyZWplY3QoYWJydXB0LmVycm9yKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpe1xuICAgIHZhciBDICAgICAgICAgID0gdGhpc1xuICAgICAgLCBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgICwgcmVqZWN0ICAgICA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciBhYnJ1cHQgPSBwZXJmb3JtKGZ1bmN0aW9uKCl7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uKHByb21pc2Upe1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZihhYnJ1cHQpcmVqZWN0KGFicnVwdC5lcnJvcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7IiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCAgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbihpdGVyYXRlZCl7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGluZGV4ID0gdGhpcy5faVxuICAgICwgcG9pbnQ7XG4gIGlmKGluZGV4ID49IE8ubGVuZ3RoKXJldHVybiB7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZX07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7dmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZX07XG59KTsiLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBERVNDUklQVE9SUyAgICA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgcmVkZWZpbmUgICAgICAgPSByZXF1aXJlKCcuL19yZWRlZmluZScpXG4gICwgTUVUQSAgICAgICAgICAgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZXG4gICwgJGZhaWxzICAgICAgICAgPSByZXF1aXJlKCcuL19mYWlscycpXG4gICwgc2hhcmVkICAgICAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIHVpZCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fdWlkJylcbiAgLCB3a3MgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3drcycpXG4gICwgd2tzRXh0ICAgICAgICAgPSByZXF1aXJlKCcuL193a3MtZXh0JylcbiAgLCB3a3NEZWZpbmUgICAgICA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKVxuICAsIGtleU9mICAgICAgICAgID0gcmVxdWlyZSgnLi9fa2V5b2YnKVxuICAsIGVudW1LZXlzICAgICAgID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJylcbiAgLCBpc0FycmF5ICAgICAgICA9IHJlcXVpcmUoJy4vX2lzLWFycmF5JylcbiAgLCBhbk9iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9JT2JqZWN0ICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgY3JlYXRlRGVzYyAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJylcbiAgLCBfY3JlYXRlICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIGdPUE5FeHQgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JylcbiAgLCAkR09QRCAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJylcbiAgLCAkRFAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgJGtleXMgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgZ09QRCAgICAgICAgICAgPSAkR09QRC5mXG4gICwgZFAgICAgICAgICAgICAgPSAkRFAuZlxuICAsIGdPUE4gICAgICAgICAgID0gZ09QTkV4dC5mXG4gICwgJFN5bWJvbCAgICAgICAgPSBnbG9iYWwuU3ltYm9sXG4gICwgJEpTT04gICAgICAgICAgPSBnbG9iYWwuSlNPTlxuICAsIF9zdHJpbmdpZnkgICAgID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5XG4gICwgUFJPVE9UWVBFICAgICAgPSAncHJvdG90eXBlJ1xuICAsIEhJRERFTiAgICAgICAgID0gd2tzKCdfaGlkZGVuJylcbiAgLCBUT19QUklNSVRJVkUgICA9IHdrcygndG9QcmltaXRpdmUnKVxuICAsIGlzRW51bSAgICAgICAgID0ge30ucHJvcGVydHlJc0VudW1lcmFibGVcbiAgLCBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5JylcbiAgLCBBbGxTeW1ib2xzICAgICA9IHNoYXJlZCgnc3ltYm9scycpXG4gICwgT1BTeW1ib2xzICAgICAgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKVxuICAsIE9iamVjdFByb3RvICAgID0gT2JqZWN0W1BST1RPVFlQRV1cbiAgLCBVU0VfTkFUSVZFICAgICA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbidcbiAgLCBRT2JqZWN0ICAgICAgICA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbigpe1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7dmFsdWU6IDd9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uKGl0LCBrZXksIEQpe1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYocHJvdG9EZXNjKWRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bylkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHRhZyl7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpe1xuICBpZihpdCA9PT0gT2JqZWN0UHJvdG8pJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYoaGFzKEFsbFN5bWJvbHMsIGtleSkpe1xuICAgIGlmKCFELmVudW1lcmFibGUpe1xuICAgICAgaWYoIWhhcyhpdCwgSElEREVOKSlkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZihoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKWl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwge2VudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCl7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKVxuICAgICwgaSAgICA9IDBcbiAgICAsIGwgPSBrZXlzLmxlbmd0aFxuICAgICwga2V5O1xuICB3aGlsZShsID4gaSkkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKXtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpe1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZih0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSlyZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcbiAgaXQgID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKXJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZihEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHZhciBuYW1lcyAgPSBnT1BOKHRvSU9iamVjdChpdCkpXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwgaSAgICAgID0gMFxuICAgICwga2V5O1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKXtcbiAgICBpZighaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KXtcbiAgdmFyIElTX09QICA9IGl0ID09PSBPYmplY3RQcm90b1xuICAgICwgbmFtZXMgID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwgaSAgICAgID0gMFxuICAgICwga2V5O1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKXtcbiAgICBpZihoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZighVVNFX05BVElWRSl7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKXtcbiAgICBpZih0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCl0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIGlmKHRoaXMgPT09IE9iamVjdFByb3RvKSRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZihERVNDUklQVE9SUyAmJiBzZXR0ZXIpc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7Y29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXR9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCl7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiAgID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5Jykpe1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbihuYW1lKXtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHtTeW1ib2w6ICRTeW1ib2x9KTtcblxuZm9yKHZhciBzeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGkgPSAwOyBzeW1ib2xzLmxlbmd0aCA+IGk7ICl3a3Moc3ltYm9sc1tpKytdKTtcblxuZm9yKHZhciBzeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgaSA9IDA7IHN5bWJvbHMubGVuZ3RoID4gaTsgKXdrc0RlZmluZShzeW1ib2xzW2krK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uKGtleSl7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihrZXkpe1xuICAgIGlmKGlzU3ltYm9sKGtleSkpcmV0dXJuIGtleU9mKFN5bWJvbFJlZ2lzdHJ5LCBrZXkpO1xuICAgIHRocm93IFR5cGVFcnJvcihrZXkgKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uKCl7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uKCl7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHthOiBTfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KXtcbiAgICBpZihpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSlyZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICB2YXIgYXJncyA9IFtpdF1cbiAgICAgICwgaSAgICA9IDFcbiAgICAgICwgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZShhcmd1bWVudHMubGVuZ3RoID4gaSlhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZih0eXBlb2YgcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykkcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICBpZigkcmVwbGFjZXIgfHwgIWlzQXJyYXkocmVwbGFjZXIpKXJlcGxhY2VyID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG4gICAgICBpZigkcmVwbGFjZXIpdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmKCFpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7dG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJyl9KTsiLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTsiLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTsiLCJyZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdsb2JhbCAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGhpZGUgICAgICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCBJdGVyYXRvcnMgICAgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCBUT19TVFJJTkdfVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbmZvcih2YXIgY29sbGVjdGlvbnMgPSBbJ05vZGVMaXN0JywgJ0RPTVRva2VuTGlzdCcsICdNZWRpYUxpc3QnLCAnU3R5bGVTaGVldExpc3QnLCAnQ1NTUnVsZUxpc3QnXSwgaSA9IDA7IGkgPCA1OyBpKyspe1xuICB2YXIgTkFNRSAgICAgICA9IGNvbGxlY3Rpb25zW2ldXG4gICAgLCBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdXG4gICAgLCBwcm90byAgICAgID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYocHJvdG8gJiYgIXByb3RvW1RPX1NUUklOR19UQUddKWhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICBJdGVyYXRvcnNbTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59IiwiLyohXG4gKiBtaTE4biAtIGh0dHBzOi8vZ2l0aHViLmNvbS9EcmFnZ2FibGUvbWkxOG5cbiAqIFZlcnNpb246IDAuMy4zXG4gKiBBdXRob3I6IEtldmluIENoYXBwZWxsIDxrZXZpbi5iLmNoYXBwZWxsQGdtYWlsLmNvbT4gKGh0dHA6Ly9rZXZpbi1jaGFwcGVsbC5jb20pXG4gKi9cbm1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4ocil7aWYoZVtyXSlyZXR1cm4gZVtyXS5leHBvcnRzO3ZhciBvPWVbcl09e2V4cG9ydHM6e30saWQ6cixsb2FkZWQ6ITF9O3JldHVybiB0W3JdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLG4pLG8ubG9hZGVkPSEwLG8uZXhwb3J0c312YXIgZT17fTtyZXR1cm4gbi5tPXQsbi5jPWUsbi5wPVwiZGlzdC9cIixuKDApfShbZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntcImRlZmF1bHRcIjp0fX1PYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbz1lKDU3KSxpPXIobyksdT1lKDUzKSxjPXIodSksZj1lKDU2KSxhPXIoZikscz1lKDQ4KSxsPXIocykscD1lKDU0KSxoPXIocCksdj1lKDU1KSx5PXIodiksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXsoMCxoW1wiZGVmYXVsdFwiXSkodGhpcyx0KTt2YXIgbj17ZXh0ZW5zaW9uOlwiLmxhbmdcIixsb2NhdGlvbjpcImFzc2V0cy9sYW5nL1wiLGxhbmdzOltcImVuLVVTXCJdLGxvY2FsZTpcImVuLVVTXCIscHJlbG9hZGVkOnt9fSxlPXRoaXM7ZS5pbml0PWZ1bmN0aW9uKHQpe3JldHVybiBlLmNvbmZpZz0oMCxsW1wiZGVmYXVsdFwiXSkoe30sbix0KSxlLmxhbmdzPSgwLGxbXCJkZWZhdWx0XCJdKSh7fSxlLmNvbmZpZy5wcmVsb2FkZWQpLGUubG9jYWxlPWUuY29uZmlnLmxvY2FsZXx8ZS5jb25maWcubGFuZ3NbMF0sZS5zZXRDdXJyZW50KGUubG9jYWxlKX19cmV0dXJuKDAseVtcImRlZmF1bHRcIl0pKHQsW3trZXk6XCJnZXRWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmN1cnJlbnQmJnRoaXMuY3VycmVudFt0XXx8dH19LHtrZXk6XCJtYWtlU2FmZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXtcIntcIjpcIlxcXFx7XCIsXCJ9XCI6XCJcXFxcfVwiLFwifFwiOlwiXFxcXHxcIn07cmV0dXJuIHQ9dC5yZXBsYWNlKC9cXHt8XFx9fFxcfC9nLGZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfSksbmV3IFJlZ0V4cCh0LFwiZ1wiKX19LHtrZXk6XCJwdXRcIix2YWx1ZTpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmN1cnJlbnRbdF09bn19LHtrZXk6XCJnZXRcIix2YWx1ZTpmdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMscj10aGlzLmdldFZhbHVlKHQpLG89ci5tYXRjaCgvXFx7W15cXH1dKz9cXH0vZyksaT12b2lkIDA7aWYobiYmbylpZihcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBuP1widW5kZWZpbmVkXCI6KDAsYVtcImRlZmF1bHRcIl0pKG4pKSlmb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKylpPW9bdV0uc3Vic3RyaW5nKDEsb1t1XS5sZW5ndGgtMSkscj1yLnJlcGxhY2UoZS5tYWtlU2FmZShvW3VdKSxuW2ldfHxcIlwiKTtlbHNlIHI9ci5yZXBsYWNlKC9cXHtbXlxcfV0rP1xcfS9nLG4pO3JldHVybiByfX0se2tleTpcImZyb21GaWxlXCIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9dC5zcGxpdChcIlxcblwiKSxyPXt9LG89MDtvPGUubGVuZ3RoO28rKylpZihuPWVbb10ubWF0Y2goL14oLis/KSAqPz0gKj8oW15cXG5dKykvKSl7dmFyIGk9blsyXS5yZXBsYWNlKC9eXFxzK3xcXHMrJC8sXCJcIik7cltuWzFdXT1pfXJldHVybiByfX0se2tleTpcInByb2Nlc3NGaWxlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49dC5yZXBsYWNlKC9cXG5cXG4vZyxcIlxcblwiKTtyZXR1cm4gdGhpcy5mcm9tRmlsZShuKX19LHtrZXk6XCJsb2FkTGFuZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyB3aW5kb3cuUHJvbWlzZShmdW5jdGlvbihlLHIpe24ubGFuZ3NbdF0/ZShuLmxhbmdzW3RdKTohZnVuY3Rpb24oKXt2YXIgbz1uZXcgWE1MSHR0cFJlcXVlc3QsaT1uLmNvbmZpZy5sb2NhdGlvbit0K24uY29uZmlnLmV4dGVuc2lvbjtvLm9wZW4oXCJHRVRcIixpLCEwKSxvLm9ubG9hZD1mdW5jdGlvbigpe2lmKHRoaXMuc3RhdHVzPD0zMDQpe3ZhciBpPW4ucHJvY2Vzc0ZpbGUoby5yZXNwb25zZVRleHQpO24ubGFuZ3NbdF09aSxlKGkpfWVsc2Ugcih7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6by5zdGF0dXNUZXh0fSl9LG8ub25lcnJvcj1mdW5jdGlvbigpe3Ioe3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Om8uc3RhdHVzVGV4dH0pfSxvLnNlbmQoKX0oKX0pfX0se2tleTpcInNldEN1cnJlbnRcIix2YWx1ZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBuPSgwLGNbXCJkZWZhdWx0XCJdKShpW1wiZGVmYXVsdFwiXS5tYXJrKGZ1bmN0aW9uIGUoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06XCJlbi1VU1wiO3JldHVybiBpW1wiZGVmYXVsdFwiXS53cmFwKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLm5leHQ9Mix0aGlzLmxvYWRMYW5nKHQpO2Nhc2UgMjpyZXR1cm4gdGhpcy5sb2NhbGU9dCx0aGlzLmN1cnJlbnQ9dGhpcy5sYW5nc1t0XSxuLmFicnVwdChcInJldHVyblwiLHRoaXMuY3VycmVudCk7Y2FzZSA1OmNhc2VcImVuZFwiOnJldHVybiBuLnN0b3AoKX19LGUsdGhpcyl9KSk7cmV0dXJuIHR9KCl9LHtrZXk6XCJnZXRMYW5nc1wiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmZpZy5sYW5nc319XSksdH0oKTtuW1wiZGVmYXVsdFwiXT1uZXcgZH0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjgpKFwid2tzXCIpLG89ZSgyMSksaT1lKDIpLlN5bWJvbCx1PVwiZnVuY3Rpb25cIj09dHlwZW9mIGksYz10LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHJbdF18fChyW3RdPXUmJmlbdF18fCh1P2k6bykoXCJTeW1ib2wuXCIrdCkpfTtjLnN0b3JlPXJ9LGZ1bmN0aW9uKHQsbil7dmFyIGU9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9ZSl9LGZ1bmN0aW9uKHQsbil7dmFyIGU9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi40LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1lKX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz0hZSgxMikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDYpLG89ZSgzNSksaT1lKDMwKSx1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuLmY9ZSg0KT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxuLGUpe2lmKHIodCksbj1pKG4sITApLHIoZSksbyl0cnl7cmV0dXJuIHUodCxuLGUpfWNhdGNoKGMpe31pZihcImdldFwiaW4gZXx8XCJzZXRcImluIGUpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIGUmJih0W25dPWUudmFsdWUpLHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuKXt2YXIgZT17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg1KSxvPWUoMTkpO3QuZXhwb3J0cz1lKDQpP2Z1bmN0aW9uKHQsbixlKXtyZXR1cm4gci5mKHQsbixvKDEsZSkpfTpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHRbbl09ZSx0fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzYpLG89ZSgyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKG8odCkpfX0sZnVuY3Rpb24odCxuKXt2YXIgZT17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0KS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIpLG89ZSgzKSxpPWUoMTYpLHU9ZSg4KSxjPVwicHJvdG90eXBlXCIsZj1mdW5jdGlvbih0LG4sZSl7dmFyIGEscyxsLHA9dCZmLkYsaD10JmYuRyx2PXQmZi5TLHk9dCZmLlAsZD10JmYuQixnPXQmZi5XLG09aD9vOm9bbl18fChvW25dPXt9KSx3PW1bY10seD1oP3I6dj9yW25dOihyW25dfHx7fSlbY107aCYmKGU9bik7Zm9yKGEgaW4gZSlzPSFwJiZ4JiZ2b2lkIDAhPT14W2FdLHMmJmEgaW4gbXx8KGw9cz94W2FdOmVbYV0sbVthXT1oJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB4W2FdP2VbYV06ZCYmcz9pKGwscik6ZyYmeFthXT09bD9mdW5jdGlvbih0KXt2YXIgbj1mdW5jdGlvbihuLGUscil7aWYodGhpcyBpbnN0YW5jZW9mIHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQobik7Y2FzZSAyOnJldHVybiBuZXcgdChuLGUpfXJldHVybiBuZXcgdChuLGUscil9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gbltjXT10W2NdLG59KGwpOnkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGw/aShGdW5jdGlvbi5jYWxsLGwpOmwseSYmKChtLnZpcnR1YWx8fChtLnZpcnR1YWw9e30pKVthXT1sLHQmZi5SJiZ3JiYhd1thXSYmdSh3LGEsbCkpKX07Zi5GPTEsZi5HPTIsZi5TPTQsZi5QPTgsZi5CPTE2LGYuVz0zMixmLlU9NjQsZi5SPTEyOCx0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKG4pe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz17fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNDApLG89ZSgyNSk7dC5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4gcih0LG8pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7aWYocih0KSx2b2lkIDA9PT1uKXJldHVybiB0O3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobixlKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiB0LmNhbGwobixlLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKGUscixvKXtyZXR1cm4gdC5jYWxsKG4sZSxyLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ITB9LGZ1bmN0aW9uKHQsbil7bi5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTpufX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDUpLmYsbz1lKDcpLGk9ZSgxKShcInRvU3RyaW5nVGFnXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7dCYmIW8odD1lP3Q6dC5wcm90b3R5cGUsaSkmJnIodCxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6bn0pfX0sZnVuY3Rpb24odCxuKXt2YXIgZT0wLHI9TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJTeW1ib2woXCIuY29uY2F0KHZvaWQgMD09PXQ/XCJcIjp0LFwiKV9cIiwoKytlK3IpLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMyksbz1lKDIpLmRvY3VtZW50LGk9cihvKSYmcihvLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1cImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZlwiLnNwbGl0KFwiLFwiKX0sZnVuY3Rpb24odCxuKXtuLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjgpKFwia2V5c1wiKSxvPWUoMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gclt0XXx8KHJbdF09byh0KSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKSxvPVwiX19jb3JlLWpzX3NoYXJlZF9fXCIsaT1yW29dfHwocltvXT17fSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpW3RdfHwoaVt0XT17fSl9fSxmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguY2VpbCxyPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/cjplKSh0KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighcih0KSlyZXR1cm4gdDt2YXIgZSxvO2lmKG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9dC50b1N0cmluZykmJiFyKG89ZS5jYWxsKHQpKSlyZXR1cm4gbztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihlPXQudmFsdWVPZikmJiFyKG89ZS5jYWxsKHQpKSlyZXR1cm4gbztpZighbiYmXCJmdW5jdGlvblwiPT10eXBlb2YoZT10LnRvU3RyaW5nKSYmIXIobz1lLmNhbGwodCkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIpLG89ZSgzKSxpPWUoMTcpLHU9ZSgzMiksYz1lKDUpLmY7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPW8uU3ltYm9sfHwoby5TeW1ib2w9aT97fTpyLlN5bWJvbHx8e30pO1wiX1wiPT10LmNoYXJBdCgwKXx8dCBpbiBufHxjKG4sdCx7dmFsdWU6dS5mKHQpfSl9fSxmdW5jdGlvbih0LG4sZSl7bi5mPWUoMSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEwKSxvPWUoMSkoXCJ0b1N0cmluZ1RhZ1wiKSxpPVwiQXJndW1lbnRzXCI9PXIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSx1PWZ1bmN0aW9uKHQsbil7dHJ5e3JldHVybiB0W25dfWNhdGNoKGUpe319O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbixlLGM7cmV0dXJuIHZvaWQgMD09PXQ/XCJVbmRlZmluZWRcIjpudWxsPT09dD9cIk51bGxcIjpcInN0cmluZ1wiPT10eXBlb2YoZT11KG49T2JqZWN0KHQpLG8pKT9lOmk/cihuKTpcIk9iamVjdFwiPT0oYz1yKG4pKSYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5jYWxsZWU/XCJBcmd1bWVudHNcIjpjfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz1lKDIpLmRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9IWUoNCkmJiFlKDEyKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSgyNCkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTApO3QuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm5cIlN0cmluZ1wiPT1yKHQpP3Quc3BsaXQoXCJcIik6T2JqZWN0KHQpfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMTcpLG89ZSgxMSksaT1lKDQxKSx1PWUoOCksYz1lKDcpLGY9ZSgxNCksYT1lKDcyKSxzPWUoMjApLGw9ZSg4MikscD1lKDEpKFwiaXRlcmF0b3JcIiksaD0hKFtdLmtleXMmJlwibmV4dFwiaW5bXS5rZXlzKCkpLHY9XCJAQGl0ZXJhdG9yXCIseT1cImtleXNcIixkPVwidmFsdWVzXCIsZz1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsbSx3LHgsYil7YShlLG4sbSk7dmFyIF8sTyxqLFM9ZnVuY3Rpb24odCl7aWYoIWgmJnQgaW4gaylyZXR1cm4ga1t0XTtzd2l0Y2godCl7Y2FzZSB5OnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLHQpfTtjYXNlIGQ6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLHQpfX0sRT1uK1wiIEl0ZXJhdG9yXCIsVD13PT1kLFA9ITEsaz10LnByb3RvdHlwZSxMPWtbcF18fGtbdl18fHcmJmtbd10sTT1MfHxTKHcpLEY9dz9UP1MoXCJlbnRyaWVzXCIpOk06dm9pZCAwLE49XCJBcnJheVwiPT1uP2suZW50cmllc3x8TDpMO2lmKE4mJihqPWwoTi5jYWxsKG5ldyB0KSksaiE9PU9iamVjdC5wcm90b3R5cGUmJihzKGosRSwhMCkscnx8YyhqLHApfHx1KGoscCxnKSkpLFQmJkwmJkwubmFtZSE9PWQmJihQPSEwLE09ZnVuY3Rpb24oKXtyZXR1cm4gTC5jYWxsKHRoaXMpfSksciYmIWJ8fCFoJiYhUCYma1twXXx8dShrLHAsTSksZltuXT1NLGZbRV09Zyx3KWlmKF89e3ZhbHVlczpUP006UyhkKSxrZXlzOng/TTpTKHkpLGVudHJpZXM6Rn0sYilmb3IoTyBpbiBfKU8gaW4ga3x8aShrLE8sX1tPXSk7ZWxzZSBvKG8uUCtvLkYqKGh8fFApLG4sXyk7cmV0dXJuIF99fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg2KSxvPWUoNzkpLGk9ZSgyNSksdT1lKDI3KShcIklFX1BST1RPXCIpLGM9ZnVuY3Rpb24oKXt9LGY9XCJwcm90b3R5cGVcIixhPWZ1bmN0aW9uKCl7dmFyIHQsbj1lKDI0KShcImlmcmFtZVwiKSxyPWkubGVuZ3RoLG89XCI8XCIsdT1cIj5cIjtmb3Iobi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGUoMzQpLmFwcGVuZENoaWxkKG4pLG4uc3JjPVwiamF2YXNjcmlwdDpcIix0PW4uY29udGVudFdpbmRvdy5kb2N1bWVudCx0Lm9wZW4oKSx0LndyaXRlKG8rXCJzY3JpcHRcIit1K1wiZG9jdW1lbnQuRj1PYmplY3RcIitvK1wiL3NjcmlwdFwiK3UpLHQuY2xvc2UoKSxhPXQuRjtyLS07KWRlbGV0ZSBhW2ZdW2lbcl1dO3JldHVybiBhKCl9O3QuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LG4pe3ZhciBlO3JldHVybiBudWxsIT09dD8oY1tmXT1yKHQpLGU9bmV3IGMsY1tmXT1udWxsLGVbdV09dCk6ZT1hKCksdm9pZCAwPT09bj9lOm8oZSxuKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDQwKSxvPWUoMjUpLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpO24uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDcpLG89ZSg5KSxpPWUoNjUpKCExKSx1PWUoMjcpKFwiSUVfUFJPVE9cIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIGUsYz1vKHQpLGY9MCxhPVtdO2ZvcihlIGluIGMpZSE9dSYmcihjLGUpJiZhLnB1c2goZSk7Zm9yKDtuLmxlbmd0aD5mOylyKGMsZT1uW2YrK10pJiYofmkoYSxlKXx8YS5wdXNoKGUpKTtyZXR1cm4gYX19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg4KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByLG8saSx1PWUoMTYpLGM9ZSg2OCksZj1lKDM0KSxhPWUoMjQpLHM9ZSgyKSxsPXMucHJvY2VzcyxwPXMuc2V0SW1tZWRpYXRlLGg9cy5jbGVhckltbWVkaWF0ZSx2PXMuTWVzc2FnZUNoYW5uZWwseT0wLGQ9e30sZz1cIm9ucmVhZHlzdGF0ZWNoYW5nZVwiLG09ZnVuY3Rpb24oKXt2YXIgdD0rdGhpcztpZihkLmhhc093blByb3BlcnR5KHQpKXt2YXIgbj1kW3RdO2RlbGV0ZSBkW3RdLG4oKX19LHc9ZnVuY3Rpb24odCl7bS5jYWxsKHQuZGF0YSl9O3AmJmh8fChwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1bXSxlPTE7YXJndW1lbnRzLmxlbmd0aD5lOyluLnB1c2goYXJndW1lbnRzW2UrK10pO3JldHVybiBkWysreV09ZnVuY3Rpb24oKXtjKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSxuKX0scih5KSx5fSxoPWZ1bmN0aW9uKHQpe2RlbGV0ZSBkW3RdfSxcInByb2Nlc3NcIj09ZSgxMCkobCk/cj1mdW5jdGlvbih0KXtsLm5leHRUaWNrKHUobSx0LDEpKX06dj8obz1uZXcgdixpPW8ucG9ydDIsby5wb3J0MS5vbm1lc3NhZ2U9dyxyPXUoaS5wb3N0TWVzc2FnZSxpLDEpKTpzLmFkZEV2ZW50TGlzdGVuZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHBvc3RNZXNzYWdlJiYhcy5pbXBvcnRTY3JpcHRzPyhyPWZ1bmN0aW9uKHQpe3MucG9zdE1lc3NhZ2UodCtcIlwiLFwiKlwiKX0scy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHcsITEpKTpyPWcgaW4gYShcInNjcmlwdFwiKT9mdW5jdGlvbih0KXtmLmFwcGVuZENoaWxkKGEoXCJzY3JpcHRcIikpW2ddPWZ1bmN0aW9uKCl7Zi5yZW1vdmVDaGlsZCh0aGlzKSxtLmNhbGwodCl9fTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHUobSx0LDEpLDApfSksdC5leHBvcnRzPXtzZXQ6cCxjbGVhcjpofX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjkpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhyKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qocih0KSl9fSxmdW5jdGlvbih0LG4pe30sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoODYpKCEwKTtlKDM3KShTdHJpbmcsXCJTdHJpbmdcIixmdW5jdGlvbih0KXt0aGlzLl90PVN0cmluZyh0KSx0aGlzLl9pPTB9LGZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLl90LGU9dGhpcy5faTtyZXR1cm4gZT49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD1yKG4sZSksdGhpcy5faSs9dC5sZW5ndGgse3ZhbHVlOnQsZG9uZTohMX0pfSl9LGZ1bmN0aW9uKHQsbixlKXtlKDg5KTtmb3IodmFyIHI9ZSgyKSxvPWUoOCksaT1lKDE0KSx1PWUoMSkoXCJ0b1N0cmluZ1RhZ1wiKSxjPVtcIk5vZGVMaXN0XCIsXCJET01Ub2tlbkxpc3RcIixcIk1lZGlhTGlzdFwiLFwiU3R5bGVTaGVldExpc3RcIixcIkNTU1J1bGVMaXN0XCJdLGY9MDtmPDU7ZisrKXt2YXIgYT1jW2ZdLHM9clthXSxsPXMmJnMucHJvdG90eXBlO2wmJiFsW3VdJiZvKGwsdSxhKSxpW2FdPWkuQXJyYXl9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPXtcImRlZmF1bHRcIjplKDU4KSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz17XCJkZWZhdWx0XCI6ZSg1OSksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9e1wiZGVmYXVsdFwiOmUoNjApLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPXtcImRlZmF1bHRcIjplKDYxKSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz17XCJkZWZhdWx0XCI6ZSg2MiksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7XCJkZWZhdWx0XCI6dH19bi5fX2VzTW9kdWxlPSEwO3ZhciBvPWUoNTApLGk9cihvKTtuW1wiZGVmYXVsdFwiXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbmV3IGlbXCJkZWZhdWx0XCJdKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihvLHUpe3RyeXt2YXIgYz1uW29dKHUpLGY9Yy52YWx1ZX1jYXRjaChhKXtyZXR1cm4gdm9pZCBlKGEpfXJldHVybiBjLmRvbmU/dm9pZCB0KGYpOmlbXCJkZWZhdWx0XCJdLnJlc29sdmUoZikudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gcihcIm5leHRcIix0KX0sZnVuY3Rpb24odCl7cmV0dXJuIHIoXCJ0aHJvd1wiLHQpfSl9cmV0dXJuIHIoXCJuZXh0XCIpfSl9fX0sZnVuY3Rpb24odCxuKXtcInVzZSBzdHJpY3RcIjtuLl9fZXNNb2R1bGU9ITAsbltcImRlZmF1bHRcIl09ZnVuY3Rpb24odCxuKXtpZighKHQgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntcImRlZmF1bHRcIjp0fX1uLl9fZXNNb2R1bGU9ITA7dmFyIG89ZSg0OSksaT1yKG8pO25bXCJkZWZhdWx0XCJdPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe2Zvcih2YXIgZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgcj1uW2VdO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSwoMCxpW1wiZGVmYXVsdFwiXSkodCxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKG4sZSxyKXtyZXR1cm4gZSYmdChuLnByb3RvdHlwZSxlKSxyJiZ0KG4sciksbn19KCl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7XCJkZWZhdWx0XCI6dH19bi5fX2VzTW9kdWxlPSEwO3ZhciBvPWUoNTIpLGk9cihvKSx1PWUoNTEpLGM9cih1KSxmPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNbXCJkZWZhdWx0XCJdJiZcInN5bWJvbFwiPT10eXBlb2YgaVtcImRlZmF1bHRcIl0/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgY1tcImRlZmF1bHRcIl0mJnQuY29uc3RydWN0b3I9PT1jW1wiZGVmYXVsdFwiXT9cInN5bWJvbFwiOnR5cGVvZiB0fTtuW1wiZGVmYXVsdFwiXT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjW1wiZGVmYXVsdFwiXSYmXCJzeW1ib2xcIj09PWYoaVtcImRlZmF1bHRcIl0pP2Z1bmN0aW9uKHQpe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiB0P1widW5kZWZpbmVkXCI6Zih0KX06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNbXCJkZWZhdWx0XCJdJiZ0LmNvbnN0cnVjdG9yPT09Y1tcImRlZmF1bHRcIl0/XCJzeW1ib2xcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgdD9cInVuZGVmaW5lZFwiOmYodCl9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPWUoOTcpfSxmdW5jdGlvbih0LG4sZSl7ZSg5MCksdC5leHBvcnRzPWUoMykuT2JqZWN0LmFzc2lnbn0sZnVuY3Rpb24odCxuLGUpe2UoOTEpO3ZhciByPWUoMykuT2JqZWN0O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIuZGVmaW5lUHJvcGVydHkodCxuLGUpfX0sZnVuY3Rpb24odCxuLGUpe2UoNDUpLGUoNDYpLGUoNDcpLGUoOTIpLHQuZXhwb3J0cz1lKDMpLlByb21pc2V9LGZ1bmN0aW9uKHQsbixlKXtlKDkzKSxlKDQ1KSxlKDk0KSxlKDk1KSx0LmV4cG9ydHM9ZSgzKS5TeW1ib2x9LGZ1bmN0aW9uKHQsbixlKXtlKDQ2KSxlKDQ3KSx0LmV4cG9ydHM9ZSgzMikuZihcIml0ZXJhdG9yXCIpfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbigpe319LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLHIpe2lmKCEodCBpbnN0YW5jZW9mIG4pfHx2b2lkIDAhPT1yJiZyIGluIHQpdGhyb3cgVHlwZUVycm9yKGUrXCI6IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDkpLG89ZSg0MyksaT1lKDg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSx1KXt2YXIgYyxmPXIobiksYT1vKGYubGVuZ3RoKSxzPWkodSxhKTtpZih0JiZlIT1lKXtmb3IoO2E+czspaWYoYz1mW3MrK10sYyE9YylyZXR1cm4hMH1lbHNlIGZvcig7YT5zO3MrKylpZigodHx8cyBpbiBmKSYmZltzXT09PWUpcmV0dXJuIHR8fHN8fDA7cmV0dXJuIXQmJi0xfX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE1KSxvPWUoMjYpLGk9ZSgxOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPXIodCksZT1vLmY7aWYoZSlmb3IodmFyIHUsYz1lKHQpLGY9aS5mLGE9MDtjLmxlbmd0aD5hOylmLmNhbGwodCx1PWNbYSsrXSkmJm4ucHVzaCh1KTtyZXR1cm4gbn19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE2KSxvPWUoNzEpLGk9ZSg2OSksdT1lKDYpLGM9ZSg0MyksZj1lKDg4KSxhPXt9LHM9e30sbj10LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsbCxwKXt2YXIgaCx2LHksZCxnPXA/ZnVuY3Rpb24oKXtyZXR1cm4gdH06Zih0KSxtPXIoZSxsLG4/MjoxKSx3PTA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZyl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgaXRlcmFibGUhXCIpO2lmKGkoZykpe2ZvcihoPWModC5sZW5ndGgpO2g+dzt3KyspaWYoZD1uP20odSh2PXRbd10pWzBdLHZbMV0pOm0odFt3XSksZD09PWF8fGQ9PT1zKXJldHVybiBkfWVsc2UgZm9yKHk9Zy5jYWxsKHQpOyEodj15Lm5leHQoKSkuZG9uZTspaWYoZD1vKHksbSx2LnZhbHVlLG4pLGQ9PT1hfHxkPT09cylyZXR1cm4gZH07bi5CUkVBSz1hLG4uUkVUVVJOPXN9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlKXt2YXIgcj12b2lkIDA9PT1lO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiByP3QoKTp0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiByP3QoblswXSk6dC5jYWxsKGUsblswXSk7Y2FzZSAyOnJldHVybiByP3QoblswXSxuWzFdKTp0LmNhbGwoZSxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gcj90KG5bMF0sblsxXSxuWzJdKTp0LmNhbGwoZSxuWzBdLG5bMV0sblsyXSk7Y2FzZSA0OnJldHVybiByP3QoblswXSxuWzFdLG5bMl0sblszXSk6dC5jYWxsKGUsblswXSxuWzFdLG5bMl0sblszXSl9cmV0dXJuIHQuYXBwbHkoZSxuKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE0KSxvPWUoMSkoXCJpdGVyYXRvclwiKSxpPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihyLkFycmF5PT09dHx8aVtvXT09PXQpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTApO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PXIodCl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsbyl7dHJ5e3JldHVybiBvP24ocihlKVswXSxlWzFdKTpuKGUpfWNhdGNoKGkpe3ZhciB1PXRbXCJyZXR1cm5cIl07dGhyb3cgdm9pZCAwIT09dSYmcih1LmNhbGwodCkpLGl9fX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMzgpLG89ZSgxOSksaT1lKDIwKSx1PXt9O2UoOCkodSxlKDEpKFwiaXRlcmF0b3JcIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHQuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7dC5wcm90b3R5cGU9cih1LHtuZXh0Om8oMSxlKX0pLGkodCxuK1wiIEl0ZXJhdG9yXCIpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMSkoXCJpdGVyYXRvclwiKSxvPSExO3RyeXt2YXIgaT1bN11bcl0oKTtpW1wicmV0dXJuXCJdPWZ1bmN0aW9uKCl7bz0hMH0sQXJyYXkuZnJvbShpLGZ1bmN0aW9uKCl7dGhyb3cgMn0pfWNhdGNoKHUpe310LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighbiYmIW8pcmV0dXJuITE7dmFyIGU9ITE7dHJ5e3ZhciBpPVs3XSx1PWlbcl0oKTt1Lm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTplPSEwfX0saVtyXT1mdW5jdGlvbigpe3JldHVybiB1fSx0KGkpfWNhdGNoKGMpe31yZXR1cm4gZX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue3ZhbHVlOm4sZG9uZTohIXR9fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTUpLG89ZSg5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGUsaT1vKHQpLHU9cihpKSxjPXUubGVuZ3RoLGY9MDtjPmY7KWlmKGlbZT11W2YrK11dPT09bilyZXR1cm4gZX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIxKShcIm1ldGFcIiksbz1lKDEzKSxpPWUoNyksdT1lKDUpLmYsYz0wLGY9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYT0hZSgxMikoZnVuY3Rpb24oKXtyZXR1cm4gZihPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pLHM9ZnVuY3Rpb24odCl7dSh0LHIse3ZhbHVlOntpOlwiT1wiKyArK2Msdzp7fX19KX0sbD1mdW5jdGlvbih0LG4pe2lmKCFvKHQpKXJldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6KFwic3RyaW5nXCI9PXR5cGVvZiB0P1wiU1wiOlwiUFwiKSt0O2lmKCFpKHQscikpe2lmKCFmKHQpKXJldHVyblwiRlwiO2lmKCFuKXJldHVyblwiRVwiO3ModCl9cmV0dXJuIHRbcl0uaX0scD1mdW5jdGlvbih0LG4pe2lmKCFpKHQscikpe2lmKCFmKHQpKXJldHVybiEwO2lmKCFuKXJldHVybiExO3ModCl9cmV0dXJuIHRbcl0ud30saD1mdW5jdGlvbih0KXtyZXR1cm4gYSYmdi5ORUVEJiZmKHQpJiYhaSh0LHIpJiZzKHQpLHR9LHY9dC5leHBvcnRzPXtLRVk6cixORUVEOiExLGZhc3RLZXk6bCxnZXRXZWFrOnAsb25GcmVlemU6aH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIpLG89ZSg0Mikuc2V0LGk9ci5NdXRhdGlvbk9ic2VydmVyfHxyLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsdT1yLnByb2Nlc3MsYz1yLlByb21pc2UsZj1cInByb2Nlc3NcIj09ZSgxMCkodSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsbixlLGE9ZnVuY3Rpb24oKXt2YXIgcixvO2ZvcihmJiYocj11LmRvbWFpbikmJnIuZXhpdCgpO3Q7KXtvPXQuZm4sdD10Lm5leHQ7dHJ5e28oKX1jYXRjaChpKXt0aHJvdyB0P2UoKTpuPXZvaWQgMCxpfX1uPXZvaWQgMCxyJiZyLmVudGVyKCl9O2lmKGYpZT1mdW5jdGlvbigpe3UubmV4dFRpY2soYSl9O2Vsc2UgaWYoaSl7dmFyIHM9ITAsbD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtuZXcgaShhKS5vYnNlcnZlKGwse2NoYXJhY3RlckRhdGE6ITB9KSxlPWZ1bmN0aW9uKCl7bC5kYXRhPXM9IXN9fWVsc2UgaWYoYyYmYy5yZXNvbHZlKXt2YXIgcD1jLnJlc29sdmUoKTtlPWZ1bmN0aW9uKCl7cC50aGVuKGEpfX1lbHNlIGU9ZnVuY3Rpb24oKXtvLmNhbGwocixhKX07cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvPXtmbjpyLG5leHQ6dm9pZCAwfTtuJiYobi5uZXh0PW8pLHR8fCh0PW8sZSgpKSxuPW99fX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMTUpLG89ZSgyNiksaT1lKDE4KSx1PWUoNDQpLGM9ZSgzNiksZj1PYmplY3QuYXNzaWduO3QuZXhwb3J0cz0hZnx8ZSgxMikoZnVuY3Rpb24oKXt2YXIgdD17fSxuPXt9LGU9U3ltYm9sKCkscj1cImFiY2RlZmdoaWprbG1ub3BxcnN0XCI7cmV0dXJuIHRbZV09NyxyLnNwbGl0KFwiXCIpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT10fSksNyE9Zih7fSx0KVtlXXx8T2JqZWN0LmtleXMoZih7fSxuKSkuam9pbihcIlwiKSE9cn0pP2Z1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXUodCksZj1hcmd1bWVudHMubGVuZ3RoLGE9MSxzPW8uZixsPWkuZjtmPmE7KWZvcih2YXIgcCxoPWMoYXJndW1lbnRzW2ErK10pLHY9cz9yKGgpLmNvbmNhdChzKGgpKTpyKGgpLHk9di5sZW5ndGgsZD0wO3k+ZDspbC5jYWxsKGgscD12W2QrK10pJiYoZVtwXT1oW3BdKTtyZXR1cm4gZX06Zn0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNSksbz1lKDYpLGk9ZSgxNSk7dC5leHBvcnRzPWUoNCk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxuKXtvKHQpO2Zvcih2YXIgZSx1PWkobiksYz11Lmxlbmd0aCxmPTA7Yz5mOylyLmYodCxlPXVbZisrXSxuW2VdKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE4KSxvPWUoMTkpLGk9ZSg5KSx1PWUoMzApLGM9ZSg3KSxmPWUoMzUpLGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtuLmY9ZSg0KT9hOmZ1bmN0aW9uKHQsbil7aWYodD1pKHQpLG49dShuLCEwKSxmKXRyeXtyZXR1cm4gYSh0LG4pfWNhdGNoKGUpe31pZihjKHQsbikpcmV0dXJuIG8oIXIuZi5jYWxsKHQsbiksdFtuXSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg5KSxvPWUoMzkpLmYsaT17fS50b1N0cmluZyx1PVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSxjPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gbyh0KX1jYXRjaChuKXtyZXR1cm4gdS5zbGljZSgpfX07dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIHUmJlwiW29iamVjdCBXaW5kb3ddXCI9PWkuY2FsbCh0KT9jKHQpOm8ocih0KSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg3KSxvPWUoNDQpLGk9ZSgyNykoXCJJRV9QUk9UT1wiKSx1PU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ9byh0KSxyKHQsaSk/dFtpXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P3U6bnVsbH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7Zm9yKHZhciBvIGluIG4pZSYmdFtvXT90W29dPW5bb106cih0LG8sbltvXSk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgyKSxvPWUoMyksaT1lKDUpLHU9ZSg0KSxjPWUoMSkoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBvW3RdP29bdF06clt0XTt1JiZuJiYhbltjXSYmaS5mKG4sYyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNiksbz1lKDIyKSxpPWUoMSkoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlLHU9cih0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09dXx8dm9pZCAwPT0oZT1yKHUpW2ldKT9uOm8oZSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyOSksbz1lKDIzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIGksdSxjPVN0cmluZyhvKG4pKSxmPXIoZSksYT1jLmxlbmd0aDtyZXR1cm4gZjwwfHxmPj1hP3Q/XCJcIjp2b2lkIDA6KGk9Yy5jaGFyQ29kZUF0KGYpLGk8NTUyOTZ8fGk+NTYzMTl8fGYrMT09PWF8fCh1PWMuY2hhckNvZGVBdChmKzEpKTw1NjMyMHx8dT41NzM0Mz90P2MuY2hhckF0KGYpOmk6dD9jLnNsaWNlKGYsZisyKTooaS01NTI5Njw8MTApKyh1LTU2MzIwKSs2NTUzNil9fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjkpLG89TWF0aC5tYXgsaT1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD1yKHQpLHQ8MD9vKHQrbiwwKTppKHQsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgzMyksbz1lKDEpKFwiaXRlcmF0b3JcIiksaT1lKDE0KTt0LmV4cG9ydHM9ZSgzKS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbih0KXtpZih2b2lkIDAhPXQpcmV0dXJuIHRbb118fHRbXCJAQGl0ZXJhdG9yXCJdfHxpW3IodCldfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoNjMpLG89ZSg3NCksaT1lKDE0KSx1PWUoOSk7dC5leHBvcnRzPWUoMzcpKEFycmF5LFwiQXJyYXlcIixmdW5jdGlvbih0LG4pe3RoaXMuX3Q9dSh0KSx0aGlzLl9pPTAsdGhpcy5faz1ufSxmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Qsbj10aGlzLl9rLGU9dGhpcy5faSsrO3JldHVybiF0fHxlPj10Lmxlbmd0aD8odGhpcy5fdD12b2lkIDAsbygxKSk6XCJrZXlzXCI9PW4/bygwLGUpOlwidmFsdWVzXCI9PW4/bygwLHRbZV0pOm8oMCxbZSx0W2VdXSl9LFwidmFsdWVzXCIpLGkuQXJndW1lbnRzPWkuQXJyYXkscihcImtleXNcIikscihcInZhbHVlc1wiKSxyKFwiZW50cmllc1wiKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTEpO3Ioci5TK3IuRixcIk9iamVjdFwiLHthc3NpZ246ZSg3OCl9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTEpO3Ioci5TK3IuRiohZSg0KSxcIk9iamVjdFwiLHtkZWZpbmVQcm9wZXJ0eTplKDUpLmZ9KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByLG8saSx1PWUoMTcpLGM9ZSgyKSxmPWUoMTYpLGE9ZSgzMykscz1lKDExKSxsPWUoMTMpLHA9ZSgyMiksaD1lKDY0KSx2PWUoNjcpLHk9ZSg4NSksZD1lKDQyKS5zZXQsZz1lKDc3KSgpLG09XCJQcm9taXNlXCIsdz1jLlR5cGVFcnJvcix4PWMucHJvY2VzcyxiPWNbbV0seD1jLnByb2Nlc3MsXz1cInByb2Nlc3NcIj09YSh4KSxPPWZ1bmN0aW9uKCl7fSxqPSEhZnVuY3Rpb24oKXt0cnl7dmFyIHQ9Yi5yZXNvbHZlKDEpLG49KHQuY29uc3RydWN0b3I9e30pW2UoMSkoXCJzcGVjaWVzXCIpXT1mdW5jdGlvbih0KXt0KE8sTyl9O3JldHVybihffHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZ0LnRoZW4oTylpbnN0YW5jZW9mIG59Y2F0Y2gocil7fX0oKSxTPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9PT1ufHx0PT09YiYmbj09PWl9LEU9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuISghbCh0KXx8XCJmdW5jdGlvblwiIT10eXBlb2Yobj10LnRoZW4pKSYmbn0sVD1mdW5jdGlvbih0KXtyZXR1cm4gUyhiLHQpP25ldyBQKHQpOm5ldyBvKHQpfSxQPW89ZnVuY3Rpb24odCl7dmFyIG4sZTt0aGlzLnByb21pc2U9bmV3IHQoZnVuY3Rpb24odCxyKXtpZih2b2lkIDAhPT1ufHx2b2lkIDAhPT1lKXRocm93IHcoXCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvclwiKTtuPXQsZT1yfSksdGhpcy5yZXNvbHZlPXAobiksdGhpcy5yZWplY3Q9cChlKX0saz1mdW5jdGlvbih0KXt0cnl7dCgpfWNhdGNoKG4pe3JldHVybntlcnJvcjpufX19LEw9ZnVuY3Rpb24odCxuKXtpZighdC5fbil7dC5fbj0hMDt2YXIgZT10Ll9jO2coZnVuY3Rpb24oKXtmb3IodmFyIHI9dC5fdixvPTE9PXQuX3MsaT0wLHU9ZnVuY3Rpb24obil7dmFyIGUsaSx1PW8/bi5vazpuLmZhaWwsYz1uLnJlc29sdmUsZj1uLnJlamVjdCxhPW4uZG9tYWluO3RyeXt1PyhvfHwoMj09dC5faCYmTih0KSx0Ll9oPTEpLHU9PT0hMD9lPXI6KGEmJmEuZW50ZXIoKSxlPXUociksYSYmYS5leGl0KCkpLGU9PT1uLnByb21pc2U/Zih3KFwiUHJvbWlzZS1jaGFpbiBjeWNsZVwiKSk6KGk9RShlKSk/aS5jYWxsKGUsYyxmKTpjKGUpKTpmKHIpfWNhdGNoKHMpe2Yocyl9fTtlLmxlbmd0aD5pOyl1KGVbaSsrXSk7dC5fYz1bXSx0Ll9uPSExLG4mJiF0Ll9oJiZNKHQpfSl9fSxNPWZ1bmN0aW9uKHQpe2QuY2FsbChjLGZ1bmN0aW9uKCl7dmFyIG4sZSxyLG89dC5fdjtpZihGKHQpJiYobj1rKGZ1bmN0aW9uKCl7Xz94LmVtaXQoXCJ1bmhhbmRsZWRSZWplY3Rpb25cIixvLHQpOihlPWMub251bmhhbmRsZWRyZWplY3Rpb24pP2Uoe3Byb21pc2U6dCxyZWFzb246b30pOihyPWMuY29uc29sZSkmJnIuZXJyb3ImJnIuZXJyb3IoXCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25cIixvKX0pLHQuX2g9X3x8Rih0KT8yOjEpLHQuX2E9dm9pZCAwLG4pdGhyb3cgbi5lcnJvcn0pfSxGPWZ1bmN0aW9uKHQpe2lmKDE9PXQuX2gpcmV0dXJuITE7Zm9yKHZhciBuLGU9dC5fYXx8dC5fYyxyPTA7ZS5sZW5ndGg+cjspaWYobj1lW3IrK10sbi5mYWlsfHwhRihuLnByb21pc2UpKXJldHVybiExO3JldHVybiEwfSxOPWZ1bmN0aW9uKHQpe2QuY2FsbChjLGZ1bmN0aW9uKCl7dmFyIG47Xz94LmVtaXQoXCJyZWplY3Rpb25IYW5kbGVkXCIsdCk6KG49Yy5vbnJlamVjdGlvbmhhbmRsZWQpJiZuKHtwcm9taXNlOnQscmVhc29uOnQuX3Z9KX0pfSxBPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7bi5fZHx8KG4uX2Q9ITAsbj1uLl93fHxuLG4uX3Y9dCxuLl9zPTIsbi5fYXx8KG4uX2E9bi5fYy5zbGljZSgpKSxMKG4sITApKX0sUj1mdW5jdGlvbih0KXt2YXIgbixlPXRoaXM7aWYoIWUuX2Qpe2UuX2Q9ITAsZT1lLl93fHxlO3RyeXtpZihlPT09dCl0aHJvdyB3KFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7KG49RSh0KSk/ZyhmdW5jdGlvbigpe3ZhciByPXtfdzplLF9kOiExfTt0cnl7bi5jYWxsKHQsZihSLHIsMSksZihBLHIsMSkpfWNhdGNoKG8pe0EuY2FsbChyLG8pfX0pOihlLl92PXQsZS5fcz0xLEwoZSwhMSkpfWNhdGNoKHIpe0EuY2FsbCh7X3c6ZSxfZDohMX0scil9fX07anx8KGI9ZnVuY3Rpb24odCl7aCh0aGlzLGIsbSxcIl9oXCIpLHAodCksci5jYWxsKHRoaXMpO3RyeXt0KGYoUix0aGlzLDEpLGYoQSx0aGlzLDEpKX1jYXRjaChuKXtBLmNhbGwodGhpcyxuKX19LHI9ZnVuY3Rpb24odCl7dGhpcy5fYz1bXSx0aGlzLl9hPXZvaWQgMCx0aGlzLl9zPTAsdGhpcy5fZD0hMSx0aGlzLl92PXZvaWQgMCx0aGlzLl9oPTAsdGhpcy5fbj0hMX0sci5wcm90b3R5cGU9ZSg4MykoYi5wcm90b3R5cGUse3RoZW46ZnVuY3Rpb24odCxuKXt2YXIgZT1UKHkodGhpcyxiKSk7cmV0dXJuIGUub2s9XCJmdW5jdGlvblwiIT10eXBlb2YgdHx8dCxlLmZhaWw9XCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbixlLmRvbWFpbj1fP3guZG9tYWluOnZvaWQgMCx0aGlzLl9jLnB1c2goZSksdGhpcy5fYSYmdGhpcy5fYS5wdXNoKGUpLHRoaXMuX3MmJkwodGhpcywhMSksZS5wcm9taXNlfSxcImNhdGNoXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9fSksUD1mdW5jdGlvbigpe3ZhciB0PW5ldyByO3RoaXMucHJvbWlzZT10LHRoaXMucmVzb2x2ZT1mKFIsdCwxKSx0aGlzLnJlamVjdD1mKEEsdCwxKX0pLHMocy5HK3MuVytzLkYqIWose1Byb21pc2U6Yn0pLGUoMjApKGIsbSksZSg4NCkobSksaT1lKDMpW21dLHMocy5TK3MuRiohaixtLHtyZWplY3Q6ZnVuY3Rpb24odCl7dmFyIG49VCh0aGlzKSxlPW4ucmVqZWN0O3JldHVybiBlKHQpLG4ucHJvbWlzZX19KSxzKHMuUytzLkYqKHV8fCFqKSxtLHtyZXNvbHZlOmZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBiJiZTKHQuY29uc3RydWN0b3IsdGhpcykpcmV0dXJuIHQ7dmFyIG49VCh0aGlzKSxlPW4ucmVzb2x2ZTtyZXR1cm4gZSh0KSxuLnByb21pc2V9fSkscyhzLlMrcy5GKiEoaiYmZSg3MykoZnVuY3Rpb24odCl7Yi5hbGwodClbXCJjYXRjaFwiXShPKX0pKSxtLHthbGw6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxlPVQobikscj1lLnJlc29sdmUsbz1lLnJlamVjdCxpPWsoZnVuY3Rpb24oKXt2YXIgZT1bXSxpPTAsdT0xO3YodCwhMSxmdW5jdGlvbih0KXt2YXIgYz1pKyssZj0hMTtlLnB1c2godm9pZCAwKSx1Kyssbi5yZXNvbHZlKHQpLnRoZW4oZnVuY3Rpb24odCl7Znx8KGY9ITAsZVtjXT10LC0tdXx8cihlKSl9LG8pfSksLS11fHxyKGUpfSk7cmV0dXJuIGkmJm8oaS5lcnJvciksZS5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMsZT1UKG4pLHI9ZS5yZWplY3Qsbz1rKGZ1bmN0aW9uKCl7dih0LCExLGZ1bmN0aW9uKHQpe24ucmVzb2x2ZSh0KS50aGVuKGUucmVzb2x2ZSxyKX0pfSk7cmV0dXJuIG8mJnIoby5lcnJvciksZS5wcm9taXNlfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgyKSxvPWUoNyksaT1lKDQpLHU9ZSgxMSksYz1lKDQxKSxmPWUoNzYpLktFWSxhPWUoMTIpLHM9ZSgyOCksbD1lKDIwKSxwPWUoMjEpLGg9ZSgxKSx2PWUoMzIpLHk9ZSgzMSksZD1lKDc1KSxnPWUoNjYpLG09ZSg3MCksdz1lKDYpLHg9ZSg5KSxiPWUoMzApLF89ZSgxOSksTz1lKDM4KSxqPWUoODEpLFM9ZSg4MCksRT1lKDUpLFQ9ZSgxNSksUD1TLmYsaz1FLmYsTD1qLmYsTT1yLlN5bWJvbCxGPXIuSlNPTixOPUYmJkYuc3RyaW5naWZ5LEE9XCJwcm90b3R5cGVcIixSPWgoXCJfaGlkZGVuXCIpLEk9aChcInRvUHJpbWl0aXZlXCIpLEM9e30ucHJvcGVydHlJc0VudW1lcmFibGUsRz1zKFwic3ltYm9sLXJlZ2lzdHJ5XCIpLFc9cyhcInN5bWJvbHNcIiksVT1zKFwib3Atc3ltYm9sc1wiKSxEPU9iamVjdFtBXSxLPVwiZnVuY3Rpb25cIj09dHlwZW9mIE0sQj1yLlFPYmplY3QsSj0hQnx8IUJbQV18fCFCW0FdLmZpbmRDaGlsZCxZPWkmJmEoZnVuY3Rpb24oKXtyZXR1cm4gNyE9TyhrKHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLFwiYVwiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKHQsbixlKXt2YXIgcj1QKEQsbik7ciYmZGVsZXRlIERbbl0sayh0LG4sZSksciYmdCE9PUQmJmsoRCxuLHIpfTprLHE9ZnVuY3Rpb24odCl7dmFyIG49V1t0XT1PKE1bQV0pO3JldHVybiBuLl9rPXQsbn0sej1LJiZcInN5bWJvbFwiPT10eXBlb2YgTS5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNfSxIPWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gdD09PUQmJkgoVSxuLGUpLHcodCksbj1iKG4sITApLHcoZSksbyhXLG4pPyhlLmVudW1lcmFibGU/KG8odCxSKSYmdFtSXVtuXSYmKHRbUl1bbl09ITEpLGU9TyhlLHtlbnVtZXJhYmxlOl8oMCwhMSl9KSk6KG8odCxSKXx8ayh0LFIsXygxLHt9KSksdFtSXVtuXT0hMCksWSh0LG4sZSkpOmsodCxuLGUpfSxWPWZ1bmN0aW9uKHQsbil7dyh0KTtmb3IodmFyIGUscj1nKG49eChuKSksbz0wLGk9ci5sZW5ndGg7aT5vOylIKHQsZT1yW28rK10sbltlXSk7cmV0dXJuIHR9LFE9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwPT09bj9PKHQpOlYoTyh0KSxuKX0sWD1mdW5jdGlvbih0KXt2YXIgbj1DLmNhbGwodGhpcyx0PWIodCwhMCkpO3JldHVybiEodGhpcz09PUQmJm8oVyx0KSYmIW8oVSx0KSkmJighKG58fCFvKHRoaXMsdCl8fCFvKFcsdCl8fG8odGhpcyxSKSYmdGhpc1tSXVt0XSl8fG4pfSwkPWZ1bmN0aW9uKHQsbil7aWYodD14KHQpLG49YihuLCEwKSx0IT09RHx8IW8oVyxuKXx8byhVLG4pKXt2YXIgZT1QKHQsbik7cmV0dXJuIWV8fCFvKFcsbil8fG8odCxSKSYmdFtSXVtuXXx8KGUuZW51bWVyYWJsZT0hMCksZX19LFo9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9TCh4KHQpKSxyPVtdLGk9MDtlLmxlbmd0aD5pOylvKFcsbj1lW2krK10pfHxuPT1SfHxuPT1mfHxyLnB1c2gobik7cmV0dXJuIHJ9LHR0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPXQ9PT1ELHI9TChlP1U6eCh0KSksaT1bXSx1PTA7ci5sZW5ndGg+dTspIW8oVyxuPXJbdSsrXSl8fGUmJiFvKEQsbil8fGkucHVzaChXW25dKTtyZXR1cm4gaX07S3x8KE09ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgTSl0aHJvdyBUeXBlRXJyb3IoXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhXCIpO3ZhciB0PXAoYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApLG49ZnVuY3Rpb24oZSl7dGhpcz09PUQmJm4uY2FsbChVLGUpLG8odGhpcyxSKSYmbyh0aGlzW1JdLHQpJiYodGhpc1tSXVt0XT0hMSksWSh0aGlzLHQsXygxLGUpKX07cmV0dXJuIGkmJkomJlkoRCx0LHtjb25maWd1cmFibGU6ITAsc2V0Om59KSxxKHQpfSxjKE1bQV0sXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2t9KSxTLmY9JCxFLmY9SCxlKDM5KS5mPWouZj1aLGUoMTgpLmY9WCxlKDI2KS5mPXR0LGkmJiFlKDE3KSYmYyhELFwicHJvcGVydHlJc0VudW1lcmFibGVcIixYLCEwKSx2LmY9ZnVuY3Rpb24odCl7cmV0dXJuIHEoaCh0KSl9KSx1KHUuRyt1LlcrdS5GKiFLLHtTeW1ib2w6TX0pO2Zvcih2YXIgbnQ9XCJoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlc1wiLnNwbGl0KFwiLFwiKSxldD0wO250Lmxlbmd0aD5ldDspaChudFtldCsrXSk7Zm9yKHZhciBudD1UKGguc3RvcmUpLGV0PTA7bnQubGVuZ3RoPmV0Oyl5KG50W2V0KytdKTt1KHUuUyt1LkYqIUssXCJTeW1ib2xcIix7XCJmb3JcIjpmdW5jdGlvbih0KXtyZXR1cm4gbyhHLHQrPVwiXCIpP0dbdF06R1t0XT1NKHQpfSxrZXlGb3I6ZnVuY3Rpb24odCl7aWYoeih0KSlyZXR1cm4gZChHLHQpO3Rocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIHN5bWJvbCFcIil9LHVzZVNldHRlcjpmdW5jdGlvbigpe0o9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe0o9ITF9fSksdSh1LlMrdS5GKiFLLFwiT2JqZWN0XCIse2NyZWF0ZTpRLGRlZmluZVByb3BlcnR5OkgsZGVmaW5lUHJvcGVydGllczpWLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjokLGdldE93blByb3BlcnR5TmFtZXM6WixnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6dHR9KSxGJiZ1KHUuUyt1LkYqKCFLfHxhKGZ1bmN0aW9uKCl7dmFyIHQ9TSgpO3JldHVyblwiW251bGxdXCIhPU4oW3RdKXx8XCJ7fVwiIT1OKHthOnR9KXx8XCJ7fVwiIT1OKE9iamVjdCh0KSl9KSksXCJKU09OXCIse3N0cmluZ2lmeTpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT10JiYheih0KSl7Zm9yKHZhciBuLGUscj1bdF0sbz0xO2FyZ3VtZW50cy5sZW5ndGg+bzspci5wdXNoKGFyZ3VtZW50c1tvKytdKTtyZXR1cm4gbj1yWzFdLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihlPW4pLCFlJiZtKG4pfHwobj1mdW5jdGlvbih0LG4pe2lmKGUmJihuPWUuY2FsbCh0aGlzLHQsbikpLCF6KG4pKXJldHVybiBufSksclsxXT1uLE4uYXBwbHkoRixyKX19fSksTVtBXVtJXXx8ZSg4KShNW0FdLEksTVtBXS52YWx1ZU9mKSxsKE0sXCJTeW1ib2xcIiksbChNYXRoLFwiTWF0aFwiLCEwKSxsKHIuSlNPTixcIkpTT05cIiwhMCl9LGZ1bmN0aW9uKHQsbixlKXtlKDMxKShcImFzeW5jSXRlcmF0b3JcIil9LGZ1bmN0aW9uKHQsbixlKXtlKDMxKShcIm9ic2VydmFibGVcIil9LGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gcigpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBvKHQpe2lmKHM9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKHM9PT1lfHwhcykmJnNldFRpbWVvdXQpcmV0dXJuIHM9c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBzKHQsMCl9Y2F0Y2gobil7dHJ5e3JldHVybiBzLmNhbGwobnVsbCx0LDApfWNhdGNoKG4pe3JldHVybiBzLmNhbGwodGhpcyx0LDApfX19ZnVuY3Rpb24gaSh0KXtpZihsPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGw9PT1yfHwhbCkmJmNsZWFyVGltZW91dClyZXR1cm4gbD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtyZXR1cm4gbCh0KX1jYXRjaChuKXt0cnl7cmV0dXJuIGwuY2FsbChudWxsLHQpfWNhdGNoKG4pe3JldHVybiBsLmNhbGwodGhpcyx0KX19fWZ1bmN0aW9uIHUoKXt5JiZoJiYoeT0hMSxoLmxlbmd0aD92PWguY29uY2F0KHYpOmQ9LTEsdi5sZW5ndGgmJmMoKSl9ZnVuY3Rpb24gYygpe2lmKCF5KXt2YXIgdD1vKHUpO3k9ITA7Zm9yKHZhciBuPXYubGVuZ3RoO247KXtmb3IoaD12LHY9W107KytkPG47KWgmJmhbZF0ucnVuKCk7ZD0tMSxuPXYubGVuZ3RofWg9bnVsbCx5PSExLGkodCl9fWZ1bmN0aW9uIGYodCxuKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9bn1mdW5jdGlvbiBhKCl7fXZhciBzLGwscD10LmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e3M9XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OmV9Y2F0Y2godCl7cz1lfXRyeXtsPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6cn1jYXRjaCh0KXtsPXJ9fSgpO3ZhciBoLHY9W10seT0hMSxkPS0xO3AubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIG49bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspbltlLTFdPWFyZ3VtZW50c1tlXTt2LnB1c2gobmV3IGYodCxuKSksMSE9PXYubGVuZ3RofHx5fHxvKGMpfSxmLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxwLnRpdGxlPVwiYnJvd3NlclwiLHAuYnJvd3Nlcj0hMCxwLmVudj17fSxwLmFyZ3Y9W10scC52ZXJzaW9uPVwiXCIscC52ZXJzaW9ucz17fSxwLm9uPWEscC5hZGRMaXN0ZW5lcj1hLHAub25jZT1hLHAub2ZmPWEscC5yZW1vdmVMaXN0ZW5lcj1hLHAucmVtb3ZlQWxsTGlzdGVuZXJzPWEscC5lbWl0PWEscC5iaW5kaW5nPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxwLmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifSxwLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0scC51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sZnVuY3Rpb24odCxuLGUpeyhmdW5jdGlvbihuKXt2YXIgcj1cIm9iamVjdFwiPT10eXBlb2Ygbj9uOlwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3c/d2luZG93Olwib2JqZWN0XCI9PXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxvPXIucmVnZW5lcmF0b3JSdW50aW1lJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKS5pbmRleE9mKFwicmVnZW5lcmF0b3JSdW50aW1lXCIpPj0wLGk9byYmci5yZWdlbmVyYXRvclJ1bnRpbWU7aWYoci5yZWdlbmVyYXRvclJ1bnRpbWU9dm9pZCAwLHQuZXhwb3J0cz1lKDk4KSxvKXIucmVnZW5lcmF0b3JSdW50aW1lPWk7ZWxzZSB0cnl7ZGVsZXRlIHIucmVnZW5lcmF0b3JSdW50aW1lfWNhdGNoKHUpe3IucmVnZW5lcmF0b3JSdW50aW1lPXZvaWQgMH19KS5jYWxsKG4sZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKSl9LGZ1bmN0aW9uKHQsbixlKXsoZnVuY3Rpb24obixlKXshZnVuY3Rpb24obil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0LG4sZSxyKXt2YXIgbz1PYmplY3QuY3JlYXRlKChufHxpKS5wcm90b3R5cGUpLHU9bmV3IHYocnx8W10pO3JldHVybiBvLl9pbnZva2U9bCh0LGUsdSksb31mdW5jdGlvbiBvKHQsbixlKXt0cnl7cmV0dXJue3R5cGU6XCJub3JtYWxcIixhcmc6dC5jYWxsKG4sZSl9fWNhdGNoKHIpe3JldHVybnt0eXBlOlwidGhyb3dcIixhcmc6cn19fWZ1bmN0aW9uIGkoKXt9ZnVuY3Rpb24gdSgpe31mdW5jdGlvbiBjKCl7fWZ1bmN0aW9uIGYodCl7W1wibmV4dFwiLFwidGhyb3dcIixcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShuLHQpfX0pfWZ1bmN0aW9uIGEodCl7dGhpcy5hcmc9dH1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIG4oZSxyLGksdSl7dmFyIGM9byh0W2VdLHQscik7aWYoXCJ0aHJvd1wiIT09Yy50eXBlKXt2YXIgZj1jLmFyZyxzPWYudmFsdWU7cmV0dXJuIHMgaW5zdGFuY2VvZiBhP1Byb21pc2UucmVzb2x2ZShzLmFyZykudGhlbihmdW5jdGlvbih0KXtuKFwibmV4dFwiLHQsaSx1KX0sZnVuY3Rpb24odCl7bihcInRocm93XCIsdCxpLHUpfSk6UHJvbWlzZS5yZXNvbHZlKHMpLnRoZW4oZnVuY3Rpb24odCl7Zi52YWx1ZT10LGkoZil9LHUpfXUoYy5hcmcpfWZ1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7bih0LGUscixvKX0pfXJldHVybiBpPWk/aS50aGVuKHIscik6cigpfVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmRvbWFpbiYmKG49ZS5kb21haW4uYmluZChuKSk7dmFyIGk7dGhpcy5faW52b2tlPXJ9ZnVuY3Rpb24gbCh0LG4sZSl7dmFyIHI9ajtyZXR1cm4gZnVuY3Rpb24oaSx1KXtpZihyPT09RSl0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO2lmKHI9PT1UKXtpZihcInRocm93XCI9PT1pKXRocm93IHU7cmV0dXJuIGQoKX1mb3IoOzspe3ZhciBjPWUuZGVsZWdhdGU7aWYoYyl7aWYoXCJyZXR1cm5cIj09PWl8fFwidGhyb3dcIj09PWkmJmMuaXRlcmF0b3JbaV09PT1nKXtlLmRlbGVnYXRlPW51bGw7dmFyIGY9Yy5pdGVyYXRvcltcInJldHVyblwiXTtpZihmKXt2YXIgYT1vKGYsYy5pdGVyYXRvcix1KTtpZihcInRocm93XCI9PT1hLnR5cGUpe2k9XCJ0aHJvd1wiLHU9YS5hcmc7Y29udGludWV9fWlmKFwicmV0dXJuXCI9PT1pKWNvbnRpbnVlfXZhciBhPW8oYy5pdGVyYXRvcltpXSxjLml0ZXJhdG9yLHUpO2lmKFwidGhyb3dcIj09PWEudHlwZSl7ZS5kZWxlZ2F0ZT1udWxsLGk9XCJ0aHJvd1wiLHU9YS5hcmc7Y29udGludWV9aT1cIm5leHRcIix1PWc7dmFyIHM9YS5hcmc7aWYoIXMuZG9uZSlyZXR1cm4gcj1TLHM7ZVtjLnJlc3VsdE5hbWVdPXMudmFsdWUsZS5uZXh0PWMubmV4dExvYyxlLmRlbGVnYXRlPW51bGx9aWYoXCJuZXh0XCI9PT1pKWUuc2VudD1lLl9zZW50PXU7ZWxzZSBpZihcInRocm93XCI9PT1pKXtpZihyPT09ail0aHJvdyByPVQsdTtlLmRpc3BhdGNoRXhjZXB0aW9uKHUpJiYoaT1cIm5leHRcIix1PWcpfWVsc2VcInJldHVyblwiPT09aSYmZS5hYnJ1cHQoXCJyZXR1cm5cIix1KTtyPUU7dmFyIGE9byh0LG4sZSk7aWYoXCJub3JtYWxcIj09PWEudHlwZSl7cj1lLmRvbmU/VDpTO3ZhciBzPXt2YWx1ZTphLmFyZyxkb25lOmUuZG9uZX07aWYoYS5hcmchPT1QKXJldHVybiBzO2UuZGVsZWdhdGUmJlwibmV4dFwiPT09aSYmKHU9Zyl9ZWxzZVwidGhyb3dcIj09PWEudHlwZSYmKHI9VCxpPVwidGhyb3dcIix1PWEuYXJnKX19fWZ1bmN0aW9uIHAodCl7dmFyIG49e3RyeUxvYzp0WzBdfTsxIGluIHQmJihuLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKG4uZmluYWxseUxvYz10WzJdLG4uYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2gobil9ZnVuY3Rpb24gaCh0KXt2YXIgbj10LmNvbXBsZXRpb258fHt9O24udHlwZT1cIm5vcm1hbFwiLGRlbGV0ZSBuLmFyZyx0LmNvbXBsZXRpb249bn1mdW5jdGlvbiB2KHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzpcInJvb3RcIn1dLHQuZm9yRWFjaChwLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIHkodCl7aWYodCl7dmFyIG49dFt4XTtpZihuKXJldHVybiBuLmNhbGwodCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBlPS0xLHI9ZnVuY3Rpb24gbygpe2Zvcig7KytlPHQubGVuZ3RoOylpZihtLmNhbGwodCxlKSlyZXR1cm4gby52YWx1ZT10W2VdLG8uZG9uZT0hMSxvO3JldHVybiBvLnZhbHVlPWcsby5kb25lPSEwLG99O3JldHVybiByLm5leHQ9cn19cmV0dXJue25leHQ6ZH19ZnVuY3Rpb24gZCgpe3JldHVybnt2YWx1ZTpnLGRvbmU6ITB9fXZhciBnLG09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx3PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30seD13Lml0ZXJhdG9yfHxcIkBAaXRlcmF0b3JcIixiPXcudG9TdHJpbmdUYWd8fFwiQEB0b1N0cmluZ1RhZ1wiLF89XCJvYmplY3RcIj09dHlwZW9mIHQsTz1uLnJlZ2VuZXJhdG9yUnVudGltZTtpZihPKXJldHVybiB2b2lkKF8mJih0LmV4cG9ydHM9TykpO089bi5yZWdlbmVyYXRvclJ1bnRpbWU9Xz90LmV4cG9ydHM6e30sTy53cmFwPXI7dmFyIGo9XCJzdXNwZW5kZWRTdGFydFwiLFM9XCJzdXNwZW5kZWRZaWVsZFwiLEU9XCJleGVjdXRpbmdcIixUPVwiY29tcGxldGVkXCIsUD17fSxrPWMucHJvdG90eXBlPWkucHJvdG90eXBlO3UucHJvdG90eXBlPWsuY29uc3RydWN0b3I9YyxjLmNvbnN0cnVjdG9yPXUsY1tiXT11LmRpc3BsYXlOYW1lPVwiR2VuZXJhdG9yRnVuY3Rpb25cIixPLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIW4mJihuPT09dXx8XCJHZW5lcmF0b3JGdW5jdGlvblwiPT09KG4uZGlzcGxheU5hbWV8fG4ubmFtZSkpfSxPLm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxjKToodC5fX3Byb3RvX189YyxiIGluIHR8fCh0W2JdPVwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoayksdH0sTy5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEodCl9LGYocy5wcm90b3R5cGUpLE8uYXN5bmM9ZnVuY3Rpb24odCxuLGUsbyl7dmFyIGk9bmV3IHMocih0LG4sZSxvKSk7cmV0dXJuIE8uaXNHZW5lcmF0b3JGdW5jdGlvbihuKT9pOmkubmV4dCgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOmkubmV4dCgpfSl9LGYoayksa1t4XT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxrW2JdPVwiR2VuZXJhdG9yXCIsay50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBHZW5lcmF0b3JdXCJ9LE8ua2V5cz1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2goZSk7cmV0dXJuIG4ucmV2ZXJzZSgpLGZ1bmN0aW9uIHIoKXtmb3IoO24ubGVuZ3RoOyl7dmFyIGU9bi5wb3AoKTtpZihlIGluIHQpcmV0dXJuIHIudmFsdWU9ZSxyLmRvbmU9ITEscn1yZXR1cm4gci5kb25lPSEwLFxucn19LE8udmFsdWVzPXksdi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnYscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9Zyx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKGgpLCF0KWZvcih2YXIgbiBpbiB0aGlzKVwidFwiPT09bi5jaGFyQXQoMCkmJm0uY2FsbCh0aGlzLG4pJiYhaXNOYU4oK24uc2xpY2UoMSkpJiYodGhpc1tuXT1nKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0sbj10LmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09bi50eXBlKXRocm93IG4uYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4obixyKXtyZXR1cm4gaS50eXBlPVwidGhyb3dcIixpLmFyZz10LGUubmV4dD1uLCEhcn1pZih0aGlzLmRvbmUpdGhyb3cgdDtmb3IodmFyIGU9dGhpcyxyPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG89dGhpcy50cnlFbnRyaWVzW3JdLGk9by5jb21wbGV0aW9uO2lmKFwicm9vdFwiPT09by50cnlMb2MpcmV0dXJuIG4oXCJlbmRcIik7aWYoby50cnlMb2M8PXRoaXMucHJldil7dmFyIHU9bS5jYWxsKG8sXCJjYXRjaExvY1wiKSxjPW0uY2FsbChvLFwiZmluYWxseUxvY1wiKTtpZih1JiZjKXtpZih0aGlzLnByZXY8by5jYXRjaExvYylyZXR1cm4gbihvLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8by5maW5hbGx5TG9jKXJldHVybiBuKG8uZmluYWxseUxvYyl9ZWxzZSBpZih1KXtpZih0aGlzLnByZXY8by5jYXRjaExvYylyZXR1cm4gbihvLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO2lmKHRoaXMucHJldjxvLmZpbmFsbHlMb2MpcmV0dXJuIG4oby5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPD10aGlzLnByZXYmJm0uY2FsbChyLFwiZmluYWxseUxvY1wiKSYmdGhpcy5wcmV2PHIuZmluYWxseUxvYyl7dmFyIG89cjticmVha319byYmKFwiYnJlYWtcIj09PXR8fFwiY29udGludWVcIj09PXQpJiZvLnRyeUxvYzw9biYmbjw9by5maW5hbGx5TG9jJiYobz1udWxsKTt2YXIgaT1vP28uY29tcGxldGlvbjp7fTtyZXR1cm4gaS50eXBlPXQsaS5hcmc9bixvP3RoaXMubmV4dD1vLmZpbmFsbHlMb2M6dGhpcy5jb21wbGV0ZShpKSxQfSxjb21wbGV0ZTpmdW5jdGlvbih0LG4pe2lmKFwidGhyb3dcIj09PXQudHlwZSl0aHJvdyB0LmFyZztcImJyZWFrXCI9PT10LnR5cGV8fFwiY29udGludWVcIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6XCJyZXR1cm5cIj09PXQudHlwZT8odGhpcy5ydmFsPXQuYXJnLHRoaXMubmV4dD1cImVuZFwiKTpcIm5vcm1hbFwiPT09dC50eXBlJiZuJiYodGhpcy5uZXh0PW4pfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGU9dGhpcy50cnlFbnRyaWVzW25dO2lmKGUuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoZS5jb21wbGV0aW9uLGUuYWZ0ZXJMb2MpLGgoZSksUH19LFwiY2F0Y2hcIjpmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgZT10aGlzLnRyeUVudHJpZXNbbl07aWYoZS50cnlMb2M9PT10KXt2YXIgcj1lLmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09ci50eXBlKXt2YXIgbz1yLmFyZztoKGUpfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxuLGUpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjp5KHQpLHJlc3VsdE5hbWU6bixuZXh0TG9jOmV9LFB9fX0oXCJvYmplY3RcIj09dHlwZW9mIG4/bjpcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpfSkuY2FsbChuLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCksZSg5NikpfV0pOyIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvLyBUaGlzIG1ldGhvZCBvZiBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgbmVlZHMgdG8gYmVcbi8vIGtlcHQgaWRlbnRpY2FsIHRvIHRoZSB3YXkgaXQgaXMgb2J0YWluZWQgaW4gcnVudGltZS5qc1xudmFyIGcgPVxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXM7XG5cbi8vIFVzZSBgZ2V0T3duUHJvcGVydHlOYW1lc2AgYmVjYXVzZSBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgY2FsbGluZ1xuLy8gYGhhc093blByb3BlcnR5YCBvbiB0aGUgZ2xvYmFsIGBzZWxmYCBvYmplY3QgaW4gYSB3b3JrZXIuIFNlZSAjMTgzLlxudmFyIGhhZFJ1bnRpbWUgPSBnLnJlZ2VuZXJhdG9yUnVudGltZSAmJlxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhnKS5pbmRleE9mKFwicmVnZW5lcmF0b3JSdW50aW1lXCIpID49IDA7XG5cbi8vIFNhdmUgdGhlIG9sZCByZWdlbmVyYXRvclJ1bnRpbWUgaW4gY2FzZSBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBsYXRlci5cbnZhciBvbGRSdW50aW1lID0gaGFkUnVudGltZSAmJiBnLnJlZ2VuZXJhdG9yUnVudGltZTtcblxuLy8gRm9yY2UgcmVldmFsdXRhdGlvbiBvZiBydW50aW1lLmpzLlxuZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vcnVudGltZVwiKTtcblxuaWYgKGhhZFJ1bnRpbWUpIHtcbiAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcnVudGltZS5cbiAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBvbGRSdW50aW1lO1xufSBlbHNlIHtcbiAgLy8gUmVtb3ZlIHRoZSBnbG9iYWwgcHJvcGVydHkgYWRkZWQgYnkgcnVudGltZS5qcy5cbiAgdHJ5IHtcbiAgICBkZWxldGUgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIH0gY2F0Y2goZSkge1xuICAgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IHByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIiB8fFxuICAgICAgICAgICAgICAobWV0aG9kID09PSBcInRocm93XCIgJiYgZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgLy8gQSByZXR1cm4gb3IgdGhyb3cgKHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyB0aHJvd1xuICAgICAgICAgICAgLy8gbWV0aG9kKSBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgICAgdmFyIHJldHVybk1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdO1xuICAgICAgICAgICAgaWYgKHJldHVybk1ldGhvZCkge1xuICAgICAgICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gocmV0dXJuTWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgYXJnKTtcbiAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmV0dXJuIG1ldGhvZCB0aHJldyBhbiBleGNlcHRpb24sIGxldCB0aGF0XG4gICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHByZXZhaWwgb3ZlciB0aGUgb3JpZ2luYWwgcmV0dXJuIG9yIHRocm93LlxuICAgICAgICAgICAgICAgIG1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgICAgICBhcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICAgICAgLy8gQ29udGludWUgd2l0aCB0aGUgb3V0ZXIgcmV0dXJuLCBub3cgdGhhdCB0aGUgZGVsZWdhdGVcbiAgICAgICAgICAgICAgLy8gaXRlcmF0b3IgaGFzIGJlZW4gdGVybWluYXRlZC5cbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKFxuICAgICAgICAgICAgZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kXSxcbiAgICAgICAgICAgIGRlbGVnYXRlLml0ZXJhdG9yLFxuICAgICAgICAgICAgYXJnXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gTGlrZSByZXR1cm5pbmcgZ2VuZXJhdG9yLnRocm93KHVuY2F1Z2h0KSwgYnV0IHdpdGhvdXQgdGhlXG4gICAgICAgICAgICAvLyBvdmVyaGVhZCBvZiBhbiBleHRyYSBmdW5jdGlvbiBjYWxsLlxuICAgICAgICAgICAgbWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERlbGVnYXRlIGdlbmVyYXRvciByYW4gYW5kIGhhbmRsZWQgaXRzIG93biBleGNlcHRpb25zIHNvXG4gICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBtZXRob2Qgd2FzLCB3ZSBjb250aW51ZSBhcyBpZiBpdCBpc1xuICAgICAgICAgIC8vIFwibmV4dFwiIHdpdGggYW4gdW5kZWZpbmVkIGFyZy5cbiAgICAgICAgICBtZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG4gICAgICAgICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG4gICAgICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oYXJnKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgICBtZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICAgIGFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBhcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIHZhciBpbmZvID0ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmRlbGVnYXRlICYmIG1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZvO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG4gICAgICAgIHJldHVybiAhIWNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuICAvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3RcbiAgLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzXG4pO1xuIiwiZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBjb250cm9sUG9zaXRpb246ICdyaWdodCcsXG4gICAgICBhcHBlbmQ6IGZhbHNlLFxuICAgICAgY29udHJvbE9yZGVyOiBbXG4gICAgICAgICdhdXRvY29tcGxldGUnLFxuICAgICAgICAnYnV0dG9uJyxcbiAgICAgICAgJ2NoZWNrYm94JyxcbiAgICAgICAgJ2NoZWNrYm94LWdyb3VwJyxcbiAgICAgICAgJ2RhdGUnLFxuICAgICAgICAnZmlsZScsXG4gICAgICAgICdoZWFkZXInLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ3BhcmFncmFwaCcsXG4gICAgICAgICdudW1iZXInLFxuICAgICAgICAncmFkaW8tZ3JvdXAnLFxuICAgICAgICAnc2VsZWN0JyxcbiAgICAgICAgJ3RleHQnLFxuICAgICAgICAndGV4dGFyZWEnXG4gICAgICBdLFxuICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgIC8vIEFycmF5IG9mIGZpZWxkcyB0byBkaXNhYmxlXG4gICAgICBkaXNhYmxlRmllbGRzOiBbXSxcbiAgICAgIGRpc2FibGVkQXR0cnM6IFtdLFxuICAgICAgZGlzYWJsZWRBY3Rpb25CdXR0b25zOiBbXSxcbiAgICAgIGVkaXRPbkFkZDogZmFsc2UsXG4gICAgICAvLyBVbmVkaXRhYmxlIGZpZWxkcyBvciBvdGhlciBjb250ZW50IHlvdSB3b3VsZCBsaWtlIHRvIGFwcGVhclxuICAgICAgLy8gYmVmb3JlIGFuZCBhZnRlciByZWd1bGFyIGZpZWxkczpcbiAgICAgIC8vIGFycmF5IG9mIG9iamVjdHMgd2l0aCBmaWVsZHMgdmFsdWVzXG4gICAgICAvLyBleDpcbiAgICAgIC8vIGRlZmF1bHRGaWVsZHM6IFt7XG4gICAgICAvLyAgIGxhYmVsOiAnRmlyc3QgTmFtZScsXG4gICAgICAvLyAgIG5hbWU6ICdmaXJzdC1uYW1lJyxcbiAgICAgIC8vICAgcmVxdWlyZWQ6ICd0cnVlJyxcbiAgICAgIC8vICAgZGVzY3JpcHRpb246ICdZb3VyIGZpcnN0IG5hbWUnLFxuICAgICAgLy8gICB0eXBlOiAndGV4dCdcbiAgICAgIC8vIH0sIHtcbiAgICAgIC8vICAgbGFiZWw6ICdQaG9uZScsXG4gICAgICAvLyAgIG5hbWU6ICdwaG9uZScsXG4gICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnSG93IGNhbiB3ZSByZWFjaCB5b3U/JyxcbiAgICAgIC8vICAgdHlwZTogJ3RleHQnXG4gICAgICAvLyB9XSxcbiAgICAgIGRlZmF1bHRGaWVsZHM6IFtdLFxuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGZpZWxkUmVtb3ZlV2FybjogZmFsc2UsXG4gICAgICBpbnB1dFNldHM6IFtdLFxuICAgICAgcm9sZXM6IHtcbiAgICAgICAgMTogJ0FkbWluaXN0cmF0b3InXG4gICAgICB9LFxuICAgICAgbm90aWZ5OiB7XG4gICAgICAgIGVycm9yOiBtZXNzYWdlID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSksXG4gICAgICAgIHN1Y2Nlc3M6IG1lc3NhZ2UgPT4gY29uc29sZS5sb2cobWVzc2FnZSksXG4gICAgICAgIHdhcm5pbmc6IG1lc3NhZ2UgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gICAgICB9LFxuICAgICAgb25TYXZlOiAoZXZ0LCBmb3JtRGF0YSkgPT4gbnVsbCxcbiAgICAgIG9uQ2xlYXJBbGw6ICgpID0+IG51bGwsXG4gICAgICBwcmVwZW5kOiBmYWxzZSxcbiAgICAgIHNvcnRhYmxlQ29udHJvbHM6IGZhbHNlLFxuICAgICAgc3RpY2t5Q29udHJvbHM6IHtcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxuICAgICAgICBvZmZzZXQ6IHtcbiAgICAgICAgICB0b3A6IDUsXG4gICAgICAgICAgYm90dG9tOiAnYXV0bycsXG4gICAgICAgICAgcmlnaHQ6ICdhdXRvJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGVtcGxhdGVzOiB7fSxcbiAgICAgIHNob3dBY3Rpb25CdXR0b25zOiB0cnVlLFxuICAgICAgdHlwZVVzZXJEaXNhYmxlZEF0dHJzOiB7fSxcbiAgICAgIHR5cGVVc2VyQXR0cnM6IHt9LFxuICAgICAgdHlwZVVzZXJFdmVudHM6IHt9LFxuICAgICAgcHJlZml4OiAnZm9ybS1idWlsZGVyLSdcbiAgICB9O1xuXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0STE4biA9IHtcbiAgICAgIGxvY2F0aW9uOiAnaHR0cHM6Ly9mb3JtYnVpbGRlci5vbmxpbmUvYXNzZXRzL2xhbmcvJyxcbiAgICAgIGxhbmdzOiBbXG4gICAgICAgICdlbi1VUydcbiAgICAgIF0sXG4gICAgICBwcmVsb2FkZWQ6IHtcbiAgICAgICAgJ2VuLVVTJzoge1xuICAgICAgICAgIGFkZE9wdGlvbjogJ0FkZCBPcHRpb24gKycsXG4gICAgICAgICAgYWxsRmllbGRzUmVtb3ZlZDogJ0FsbCBmaWVsZHMgd2VyZSByZW1vdmVkLicsXG4gICAgICAgICAgYWxsb3dNdWx0aXBsZUZpbGVzOiAnQWxsb3cgdXNlcnMgdG8gdXBsb2FkIG11bHRpcGxlIGZpbGVzJyxcbiAgICAgICAgICBhdXRvY29tcGxldGU6ICdBdXRvY29tcGxldGUnLFxuICAgICAgICAgIGJ1dHRvbjogJ0J1dHRvbicsXG4gICAgICAgICAgY2Fubm90QmVFbXB0eTogJ1RoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5JyxcbiAgICAgICAgICBjaGVja2JveEdyb3VwOiAnQ2hlY2tib3ggR3JvdXAnLFxuICAgICAgICAgIGNoZWNrYm94OiAnQ2hlY2tib3gnLFxuICAgICAgICAgIGNoZWNrYm94ZXM6ICdDaGVja2JveGVzJyxcbiAgICAgICAgICBjbGFzc05hbWU6ICdDbGFzcycsXG4gICAgICAgICAgY2xlYXJBbGxNZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsZWFyIGFsbCBmaWVsZHM/JyxcbiAgICAgICAgICBjbGVhcjogJ0NsZWFyJyxcbiAgICAgICAgICBjbG9zZTogJ0Nsb3NlJyxcbiAgICAgICAgICBjb250ZW50OiAnQ29udGVudCcsXG4gICAgICAgICAgY29weTogJ0NvcHkgVG8gQ2xpcGJvYXJkJyxcbiAgICAgICAgICBjb3B5QnV0dG9uOiAnJiM0MzsnLFxuICAgICAgICAgIGNvcHlCdXR0b25Ub29sdGlwOiAnQ29weScsXG4gICAgICAgICAgZGF0ZUZpZWxkOiAnRGF0ZSBGaWVsZCcsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdIZWxwIFRleHQnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uRmllbGQ6ICdEZXNjcmlwdGlvbicsXG4gICAgICAgICAgZGV2TW9kZTogJ0RldmVsb3BlciBNb2RlJyxcbiAgICAgICAgICBlZGl0TmFtZXM6ICdFZGl0IE5hbWVzJyxcbiAgICAgICAgICBlZGl0b3JUaXRsZTogJ0Zvcm0gRWxlbWVudHMnLFxuICAgICAgICAgIGVkaXRYTUw6ICdFZGl0IFhNTCcsXG4gICAgICAgICAgZW5hYmxlT3RoZXI6ICdFbmFibGUgJnF1b3Q7T3RoZXImcXVvdDsnLFxuICAgICAgICAgIGVuYWJsZU90aGVyTXNnOiAnTGV0IHVzZXJzIHRvIGVudGVyIGFuIHVubGlzdGVkIG9wdGlvbicsXG4gICAgICAgICAgZmllbGROb25FZGl0YWJsZTogJ1RoaXMgZmllbGQgY2Fubm90IGJlIGVkaXRlZC4nLFxuICAgICAgICAgIGZpZWxkUmVtb3ZlV2FybmluZzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBmaWVsZD8nLFxuICAgICAgICAgIGZpbGVVcGxvYWQ6ICdGaWxlIFVwbG9hZCcsXG4gICAgICAgICAgZm9ybVVwZGF0ZWQ6ICdGb3JtIFVwZGF0ZWQnLFxuICAgICAgICAgIGdldFN0YXJ0ZWQ6ICdEcmFnIGEgZmllbGQgZnJvbSB0aGUgcmlnaHQgdG8gdGhpcyBhcmVhJyxcbiAgICAgICAgICBoZWFkZXI6ICdIZWFkZXInLFxuICAgICAgICAgIGhpZGU6ICdFZGl0JyxcbiAgICAgICAgICBoaWRkZW46ICdIaWRkZW4gSW5wdXQnLFxuICAgICAgICAgIGlubGluZTogJ0lubGluZScsXG4gICAgICAgICAgaW5saW5lRGVzYzogJ0Rpc3BsYXkge3R5cGV9IGlubGluZScsXG4gICAgICAgICAgbGFiZWw6ICdMYWJlbCcsXG4gICAgICAgICAgbGFiZWxFbXB0eTogJ0ZpZWxkIExhYmVsIGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgICAgbGltaXRSb2xlOiAnTGltaXQgYWNjZXNzIHRvIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgcm9sZXM6JyxcbiAgICAgICAgICBtYW5kYXRvcnk6ICdNYW5kYXRvcnknLFxuICAgICAgICAgIG1heGxlbmd0aDogJ01heCBMZW5ndGgnLFxuICAgICAgICAgIG1pbk9wdGlvbk1lc3NhZ2U6ICdUaGlzIGZpZWxkIHJlcXVpcmVzIGEgbWluaW11bSBvZiAyIG9wdGlvbnMnLFxuICAgICAgICAgIG11bHRpcGxlRmlsZXM6ICdNdWx0aXBsZSBGaWxlcycsXG4gICAgICAgICAgbmFtZTogJ05hbWUnLFxuICAgICAgICAgIG5vOiAnTm8nLFxuICAgICAgICAgIG5vRmllbGRzVG9DbGVhcjogJ1RoZXJlIGFyZSBubyBmaWVsZHMgdG8gY2xlYXInLFxuICAgICAgICAgIG51bWJlcjogJ051bWJlcicsXG4gICAgICAgICAgb2ZmOiAnT2ZmJyxcbiAgICAgICAgICBvbjogJ09uJyxcbiAgICAgICAgICBvcHRpb246ICdPcHRpb24nLFxuICAgICAgICAgIG9wdGlvbnM6ICdPcHRpb25zJyxcbiAgICAgICAgICBvcHRpb25hbDogJ29wdGlvbmFsJyxcbiAgICAgICAgICBvcHRpb25MYWJlbFBsYWNlaG9sZGVyOiAnTGFiZWwnLFxuICAgICAgICAgIG9wdGlvblZhbHVlUGxhY2Vob2xkZXI6ICdWYWx1ZScsXG4gICAgICAgICAgb3B0aW9uRW1wdHk6ICdPcHRpb24gdmFsdWUgcmVxdWlyZWQnLFxuICAgICAgICAgIG90aGVyOiAnT3RoZXInLFxuICAgICAgICAgIHBhcmFncmFwaDogJ1BhcmFncmFwaCcsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGFjZWhvbGRlcicsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLnZhbHVlJzogJ1ZhbHVlJyxcbiAgICAgICAgICAncGxhY2Vob2xkZXIubGFiZWwnOiAnTGFiZWwnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci50ZXh0JzogJycsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLnRleHRhcmVhJzogJycsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLmVtYWlsJzogJ0VudGVyIHlvdSBlbWFpbCcsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLnBsYWNlaG9sZGVyJzogJycsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLmNsYXNzTmFtZSc6ICdzcGFjZSBzZXBhcmF0ZWQgY2xhc3NlcycsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLnBhc3N3b3JkJzogJ0VudGVyIHlvdXIgcGFzc3dvcmQnLFxuICAgICAgICAgIHByZXZpZXc6ICdQcmV2aWV3JyxcbiAgICAgICAgICByYWRpb0dyb3VwOiAnUmFkaW8gR3JvdXAnLFxuICAgICAgICAgIHJhZGlvOiAnUmFkaW8nLFxuICAgICAgICAgIHJlbW92ZU1lc3NhZ2U6ICdSZW1vdmUgRWxlbWVudCcsXG4gICAgICAgICAgcmVtb3ZlT3B0aW9uOiAnUmVtb3ZlIE9wdGlvbicsXG4gICAgICAgICAgcmVtb3ZlOiAnJiMyMTU7JyxcbiAgICAgICAgICByZXF1aXJlZDogJ1JlcXVpcmVkJyxcbiAgICAgICAgICByaWNoVGV4dDogJ1JpY2ggVGV4dCBFZGl0b3InLFxuICAgICAgICAgIHJvbGVzOiAnQWNjZXNzJyxcbiAgICAgICAgICByb3dzOiAnUm93cycsXG4gICAgICAgICAgc2F2ZTogJ1NhdmUnLFxuICAgICAgICAgIHNlbGVjdE9wdGlvbnM6ICdPcHRpb25zJyxcbiAgICAgICAgICBzZWxlY3Q6ICdTZWxlY3QnLFxuICAgICAgICAgIHNlbGVjdENvbG9yOiAnU2VsZWN0IENvbG9yJyxcbiAgICAgICAgICBzZWxlY3Rpb25zTWVzc2FnZTogJ0FsbG93IE11bHRpcGxlIFNlbGVjdGlvbnMnLFxuICAgICAgICAgIHNpemU6ICdTaXplJyxcbiAgICAgICAgICAnc2l6ZS54cyc6ICdFeHRyYSBTbWFsbCcsXG4gICAgICAgICAgJ3NpemUuc20nOiAnU21hbGwnLFxuICAgICAgICAgICdzaXplLm0nOiAnRGVmYXVsdCcsXG4gICAgICAgICAgJ3NpemUubGcnOiAnTGFyZ2UnLFxuICAgICAgICAgIHN0eWxlOiAnU3R5bGUnLFxuICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgYnRuOiB7XG4gICAgICAgICAgICAgICdkZWZhdWx0JzogJ0RlZmF1bHQnLFxuICAgICAgICAgICAgICBkYW5nZXI6ICdEYW5nZXInLFxuICAgICAgICAgICAgICBpbmZvOiAnSW5mbycsXG4gICAgICAgICAgICAgIHByaW1hcnk6ICdQcmltYXJ5JyxcbiAgICAgICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB3YXJuaW5nOiAnV2FybmluZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHN1YnR5cGU6ICdUeXBlJyxcbiAgICAgICAgICB0ZXh0OiAnVGV4dCBGaWVsZCcsXG4gICAgICAgICAgdGV4dEFyZWE6ICdUZXh0IEFyZWEnLFxuICAgICAgICAgIHRvZ2dsZTogJ1RvZ2dsZScsXG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmchJyxcbiAgICAgICAgICB2YWx1ZTogJ1ZhbHVlJyxcbiAgICAgICAgICB2aWV3SlNPTjogJ3sgIH0nLFxuICAgICAgICAgIHZpZXdYTUw6ICcmbHQ7LyZndDsnLFxuICAgICAgICAgIHllczogJ1llcydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBjb25maWcgPSB7fTtcbiIsImV4cG9ydCBjb25zdCBpbnN0YW5jZURhdGEgPSB7fTtcblxuZXhwb3J0IGNsYXNzIERhdGEge1xuICBjb25zdHJ1Y3Rvcihmb3JtSUQpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0ge307XG4gICAgdGhpcy5mb3JtSUQgPSBmb3JtSUQ7XG4gICAgdGhpcy5sYXlvdXQgPSAnJztcbiAgICBpbnN0YW5jZURhdGFbZm9ybUlEXSA9IHRoaXM7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGF2YWlsYWJsZWZpZWxkcyA9IHt9O1xuIiwiXG5leHBvcnQgY29uc3QgaW5zdGFuY2VEb20gPSB7fTtcbmV4cG9ydCBjb25zdCBkZWZhdWx0U3VidHlwZXMgPSB7XG4gICAgICB0ZXh0OiBbJ3RleHQnLCAncGFzc3dvcmQnLCAnZW1haWwnLCAnY29sb3InLCAndGVsJ10sXG4gICAgICBoZWFkZXI6IFsnaDEnLCAnaDInLCAnaDMnXSxcbiAgICAgIGJ1dHRvbjogWydidXR0b24nLCAnc3VibWl0JywgJ3Jlc2V0J10sXG4gICAgICBwYXJhZ3JhcGg6IFsncCcsICdhZGRyZXNzJywgJ2Jsb2NrcXVvdGUnLCAnY2FudmFzJywgJ291dHB1dCddLFxuICAgICAgdGV4dGFyZWE6IFsndGV4dGFyZWEnLCAncXVpbGwnXVxuICAgIH07XG5cblxuZXhwb3J0IGNvbnN0IGVtcHR5ID0gZWxlbWVudCA9PiB7XG4gIHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyID0gKGVsZW1zLCB0ZXJtLCBzaG93ID0gdHJ1ZSkgPT4ge1xuICBsZXQgZmlsdGVyZWRFbGVtcyA9IFtdO1xuICBsZXQgdG9nZ2xlID0gWydub25lJywgJ2Jsb2NrJ107XG5cbiAgaWYgKHNob3cpIHtcbiAgICB0b2dnbGUgPSB0b2dnbGUucmV2ZXJzZSgpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IGVsZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGV0IHR4dCA9IGVsZW1zW2ldLnRleHRDb250ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHR4dC5pbmRleE9mKHRlcm0udG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICBlbGVtc1tpXS5zdHlsZS5kaXNwbGF5ID0gdG9nZ2xlWzBdO1xuICAgICAgZmlsdGVyZWRFbGVtcy5wdXNoKGVsZW1zW2ldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbXNbaV0uc3R5bGUuZGlzcGxheSA9IHRvZ2dsZVsxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRFbGVtcztcbn07XG5cbmV4cG9ydCBjb25zdCBvcHRpb25GaWVsZHMgPSBbXG4gICAgICAnc2VsZWN0JyxcbiAgICAgICdjaGVja2JveC1ncm91cCcsXG4gICAgICAnY2hlY2tib3gnLFxuICAgICAgJ3JhZGlvLWdyb3VwJyxcbiAgICAgICdhdXRvY29tcGxldGUnXG4gICAgXTtcblxuZXhwb3J0IGNvbnN0IG9wdGlvbkZpZWxkc1JlZ0V4ID0gbmV3IFJlZ0V4cChgKCR7b3B0aW9uRmllbGRzLmpvaW4oJ3wnKX0pYCk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb20ge1xuICBjb25zdHJ1Y3Rvcihmb3JtSUQpIHtcbiAgICB0aGlzLm9wdGlvbkZpZWxkcyA9IG9wdGlvbkZpZWxkcztcbiAgICB0aGlzLm9wdGlvbkZpZWxkc1JlZ0V4ID0gb3B0aW9uRmllbGRzUmVnRXg7XG5cbiAgICB0aGlzLnN1YnR5cGVzID0gZGVmYXVsdFN1YnR5cGVzO1xuXG4gICAgLyoqXG4gICAgICogVXRpbCB0byByZW1vdmUgY29udGVudHMgb2YgRE9NIE9iamVjdFxuICAgICAqIEBwYXJhbSAge09iamVjdH0gZWxlbWVudFxuICAgICAqIEByZXR1cm4ge09iamVjdH0gZWxlbWVudCB3aXRoIGl0cyBjaGlsZHJlbiByZW1vdmVkXG4gICAgICovXG4gICAgdGhpcy5lbXB0eSA9IGVtcHR5O1xuXG4gICAgLyoqXG4gICAgICogSGlkZSBvciBzaG93IGFuIEFycmF5IG9yIEhUTUxDb2xsZWN0aW9uIG9mIGVsZW1lbnRzXG4gICAgICogQHBhcmFtICB7QXJyYXl9ICAgZWxlbXNcbiAgICAgKiBAcGFyYW0gIHtTdHJpbmd9ICB0ZXJtICBtYXRjaCB0ZXh0Q29udGVudCB0byB0aGlzIHRlcm1cbiAgICAgKiBAcGFyYW0gIHtCb29sZWFufSBzaG93ICBvciBoaWRlIGVsZW1lbnRzXG4gICAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgZmlsdGVyZWQgZWxlbWVudHNcbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjtcblxuICAgIGluc3RhbmNlRG9tW2Zvcm1JRF0gPSB0aGlzO1xuICAgIHJldHVybiBpbnN0YW5jZURvbVtmb3JtSURdO1xuICB9XG59XG4iLCIvKipcbiAqIEZvcm0gQnVpbGRlciBldmVudHNcbiAqIEByZXR1cm4ge09iamVjdH0gdmFyaW91cyBldmVudHMgdG8gYmUgdHJpZ2dlclxuICovXG4vLyBmdW5jdGlvbiBmYkV2ZW50cygpe1xuICBjb25zdCBldmVudHMgPSB7fTtcblxuICBldmVudHMubG9hZGVkID0gbmV3IEV2ZW50KCdsb2FkZWQnKTtcbiAgZXZlbnRzLnZpZXdEYXRhID0gbmV3IEV2ZW50KCd2aWV3RGF0YScpO1xuICBldmVudHMudXNlckRlY2xpbmVkID0gbmV3IEV2ZW50KCd1c2VyRGVjbGluZWQnKTtcbiAgZXZlbnRzLm1vZGFsQ2xvc2VkID0gbmV3IEV2ZW50KCdtb2RhbENsb3NlZCcpO1xuICBldmVudHMubW9kYWxPcGVuZWQgPSBuZXcgRXZlbnQoJ21vZGFsT3BlbmVkJyk7XG4gIGV2ZW50cy5mb3JtU2F2ZWQgPSBuZXcgRXZlbnQoJ2Zvcm1TYXZlZCcpO1xuICBldmVudHMuZmllbGRBZGRlZCA9IG5ldyBFdmVudCgnZmllbGRBZGRlZCcpO1xuICBldmVudHMuZmllbGRSZW1vdmVkID0gbmV3IEV2ZW50KCdmaWVsZFJlbW92ZWQnKTtcbiAgZXZlbnRzLmZpZWxkUmVuZGVyZWQgPSBuZXcgRXZlbnQoJ2ZpZWxkUmVuZGVyZWQnKTtcblxuLy8gICByZXR1cm4gZXZlbnRzO1xuLy8gfVxuXG5leHBvcnQgZGVmYXVsdCBldmVudHM7XG4iLCJpbXBvcnQgRG9tIGZyb20gJy4vZG9tJztcbmltcG9ydCB7XG4gIERhdGEsXG4gIGF2YWlsYWJsZWZpZWxkcyBhcyBhRmllbGRzXG59IGZyb20gJy4vZGF0YSc7XG5pbXBvcnQgbWkxOG4gZnJvbSAnbWkxOG4nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgSGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtkZWZhdWx0T3B0aW9ucywgZGVmYXVsdEkxOG4sIGNvbmZpZ30gZnJvbSAnLi9jb25maWcnO1xuXG5yZXF1aXJlKCcuL3BvbHlmaWxscy5qcycpLmRlZmF1bHQ7XG5cbmxldCBpbnN0YW5jZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuY29uc3QgRm9ybUJ1aWxkZXIgPSBmdW5jdGlvbihvcHRzLCBlbGVtZW50KSB7XG4gIGNvbnN0IGZvcm1CdWlsZGVyID0gdGhpcztcbiAgY29uc3QgaTE4biA9IG1pMThuLmN1cnJlbnQ7XG4gIGNvbnN0IGZvcm1JRCA9ICdmcm1iLScgKyBpbnN0YW5jZVRpbWUrKztcbiAgY29uc3QgZGF0YSA9IG5ldyBEYXRhKGZvcm1JRCk7XG4gIGNvbnN0IGQgPSBuZXcgRG9tKGZvcm1JRCk7XG4gIGNvbnN0IGhlbHBlcnMgPSBuZXcgSGVscGVycyhmb3JtSUQpO1xuICBjb25zdCBtID0gdXRpbHMubWFya3VwO1xuXG4gIGNvbnN0IG9yaWdpbmFsT3B0cyA9IG9wdHM7XG5cbiAgb3B0cyA9IGhlbHBlcnMucHJvY2Vzc09wdGlvbnMob3B0cyk7XG5cbiAgY29uc3Qgc3VidHlwZXMgPSBjb25maWcuc3VidHlwZXMgPSBoZWxwZXJzLnByb2Nlc3NTdWJ0eXBlcyhvcHRzLnN1YnR5cGVzKTtcbiAgaGVscGVycy5lZGl0b3JVSShmb3JtSUQpO1xuXG4gIGxldCAkc3RhZ2UgPSAkKGQuc3RhZ2UpO1xuXG4gIGRhdGEubGF5b3V0ID0gaGVscGVycy5lZGl0b3JMYXlvdXQob3B0cy5jb250cm9sUG9zaXRpb24pO1xuICBkYXRhLmZvcm1JRCA9IGZvcm1JRDtcbiAgZGF0YS5sYXN0SUQgPSBgJHtkYXRhLmZvcm1JRH0tZmxkLTFgO1xuXG4gIGxldCBmcm1iRmllbGRzID0gaGVscGVycy5vcmRlckZpZWxkcyhvcHRzLmZpZWxkcyk7XG5cbiAgaWYgKG9wdHMuZGlzYWJsZUZpZWxkcykge1xuICAgIC8vIHJlbW92ZSBkaXNhYmxlZEZpZWxkc1xuICAgIGZybWJGaWVsZHMgPSBmcm1iRmllbGRzLmZpbHRlcihmdW5jdGlvbihmaWVsZCkge1xuICAgICAgcmV0dXJuICF1dGlscy5pbkFycmF5KGZpZWxkLmF0dHJzLnR5cGUsIG9wdHMuZGlzYWJsZUZpZWxkcyk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAob3B0cy5zb3J0YWJsZUNvbnRyb2xzKSB7XG4gICAgZC5jb250cm9scy5jbGFzc0xpc3QuYWRkKCdzb3J0LWVuYWJsZWQnKTtcbiAgfVxuXG4gIGxldCAkY2JVTCA9ICQoZC5jb250cm9scyk7XG5cbiAgLy8gTG9vcCB0aHJvdWdoIGZtcmJGaWVsZHNcbiAgdXRpbHMuZm9yRWFjaChmcm1iRmllbGRzLCAoaSkgPT4ge1xuICAgIGxldCB7YXR0cnMsIGljb24sIC4uLmZpZWxkfSA9IGZybWJGaWVsZHNbaV07XG4gICAgbGV0IGNvbnRyb2xMYWJlbCA9IGZpZWxkLmxhYmVsO1xuICAgIGxldCBpY29uQ2xhc3NOYW1lID0gIWljb24gPyBgaWNvbi0ke2F0dHJzLm5hbWUgfHwgYXR0cnMudHlwZX1gIDogJyc7XG4gICAgaWYgKGljb24pIHtcbiAgICAgIGNvbnRyb2xMYWJlbCA9IGA8c3BhbiBjbGFzcz1cImNvbnRyb2wtaWNvblwiPiR7aWNvbn08L3NwYW4+JHtmaWVsZC5sYWJlbH1gO1xuICAgIH1cbiAgICBsZXQgbmV3RmllbGRDb250cm9sID0gbSgnbGknLFxuICAgICAgbSgnc3BhbicsIGNvbnRyb2xMYWJlbCksXG4gICAgICB7Y2xhc3NOYW1lOiBgJHtpY29uQ2xhc3NOYW1lfSBpbnB1dC1jb250cm9sIGlucHV0LWNvbnRyb2wtJHtpfWB9XG4gICAgKTtcblxuICAgIGFGaWVsZHNbYXR0cnMudHlwZV0gPSBmcm1iRmllbGRzW2ldO1xuICAgIG5ld0ZpZWxkQ29udHJvbC5kYXRhc2V0LnR5cGUgPSBhdHRycy50eXBlO1xuICAgIGQuY29udHJvbHMuYXBwZW5kQ2hpbGQobmV3RmllbGRDb250cm9sKTtcbiAgfSk7XG5cbiAgaWYgKG9wdHMuaW5wdXRTZXRzLmxlbmd0aCkge1xuICAgICQoJzxsaS8+JywgeydjbGFzcyc6ICdmYi1zZXBhcmF0b3InfSkuaHRtbCgnPGhyPicpLmFwcGVuZFRvKCRjYlVMKTtcbiAgICBvcHRzLmlucHV0U2V0cy5mb3JFYWNoKChzZXQsIGkpID0+IHtcbiAgICAgIHNldC5uYW1lID0gc2V0Lm5hbWUgfHwgdXRpbHMubWFrZUNsYXNzTmFtZShzZXQubGFiZWwpO1xuICAgICAgbGV0IGlucHV0U2V0ID0gbSgnbGknLCBzZXQubGFiZWwsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBgaW5wdXQtc2V0LWNvbnRyb2wgaW5wdXQtc2V0LSR7aX1gLFxuICAgICAgICB0eXBlOiBzZXQubmFtZVxuICAgICAgfSk7XG4gICAgICAkKGlucHV0U2V0KS5hcHBlbmRUbygkY2JVTCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBTb3J0YWJsZSBmaWVsZHNcbiAgJHN0YWdlLnNvcnRhYmxlKHtcbiAgICBjdXJzb3I6ICdtb3ZlJyxcbiAgICBvcGFjaXR5OiAwLjksXG4gICAgcmV2ZXJ0OiAxNTAsXG4gICAgYmVmb3JlU3RvcDogKGV2dCwgdWkpID0+IGhlbHBlcnMuYmVmb3JlU3RvcC5jYWxsKGhlbHBlcnMsIGV2dCwgdWkpLFxuICAgIHN0YXJ0OiAoZXZ0LCB1aSkgPT4gaGVscGVycy5zdGFydE1vdmluZy5jYWxsKGhlbHBlcnMsIGV2dCwgdWkpLFxuICAgIHN0b3A6IChldnQsIHVpKSA9PiBoZWxwZXJzLnN0b3BNb3ZpbmcuY2FsbChoZWxwZXJzLCBldnQsIHVpKSxcbiAgICBjYW5jZWw6ICdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgLmRpc2FibGVkLWZpZWxkLCAuZm9ybS1lbGVtZW50cywgLmJ0biwgYnV0dG9uJyxcbiAgICBwbGFjZWhvbGRlcjogJ2ZybWItcGxhY2Vob2xkZXInLFxuICB9KTtcblxuICAvLyBDb250cm9sQm94IHdpdGggZGlmZmVyZW50IGZpZWxkc1xuICAkY2JVTC5zb3J0YWJsZSh7XG4gICAgaGVscGVyOiAnY2xvbmUnLFxuICAgIG9wYWNpdHk6IDAuOSxcbiAgICBjb25uZWN0V2l0aDogJHN0YWdlLFxuICAgIGNhbmNlbDogJy5mYi1zZXBhcmF0b3InLFxuICAgIGN1cnNvcjogJ21vdmUnLFxuICAgIHNjcm9sbDogZmFsc2UsXG4gICAgcGxhY2Vob2xkZXI6ICd1aS1zdGF0ZS1oaWdobGlnaHQnLFxuICAgIHN0YXJ0OiAoZXZ0LCB1aSkgPT4gaGVscGVycy5zdGFydE1vdmluZy5jYWxsKGhlbHBlcnMsIGV2dCwgdWkpLFxuICAgIHN0b3A6IChldnQsIHVpKSA9PiBoZWxwZXJzLnN0b3BNb3ZpbmcuY2FsbChoZWxwZXJzLCBldnQsIHVpKSxcbiAgICByZXZlcnQ6IDE1MCxcbiAgICBiZWZvcmVTdG9wOiAoZXZ0LCB1aSkgPT4gaGVscGVycy5iZWZvcmVTdG9wLmNhbGwoaGVscGVycywgZXZ0LCB1aSksXG4gICAgZGlzdGFuY2U6IDMsXG4gICAgdXBkYXRlOiBmdW5jdGlvbihldmVudCwgdWkpIHtcbiAgICAgIGlmIChoZWxwZXJzLmRvQ2FuY2VsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVpLml0ZW0ucGFyZW50KClbMF0gPT09IGQuc3RhZ2UpIHtcbiAgICAgICAgaGVscGVycy5kb0NhbmNlbCA9IHRydWU7XG4gICAgICAgIHByb2Nlc3NDb250cm9sKHVpLml0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVscGVycy5zZXRGaWVsZE9yZGVyKCRjYlVMKTtcbiAgICAgICAgaGVscGVycy5kb0NhbmNlbCA9ICFvcHRzLnNvcnRhYmxlQ29udHJvbHM7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBsZXQgcHJvY2Vzc0NvbnRyb2wgPSBjb250cm9sID0+IHtcbiAgICBpZiAoY29udHJvbFswXS5jbGFzc0xpc3QuY29udGFpbnMoJ2lucHV0LXNldC1jb250cm9sJykpIHtcbiAgICAgIGxldCBpbnB1dFNldHMgPSBbXTtcbiAgICAgIGxldCBpbnB1dFNldCA9IG9wdHMuaW5wdXRTZXRzLmZpbHRlcihzZXQgPT5cbiAgICAgICAgc2V0Lm5hbWUgPT09IGNvbnRyb2xbMF0udHlwZSlbMF07XG4gICAgICBpZiAoaW5wdXRTZXQuc2hvd0hlYWRlcikge1xuICAgICAgICBsZXQgaGVhZGVyID0ge1xuICAgICAgICAgICAgdHlwZTogJ2hlYWRlcicsXG4gICAgICAgICAgICBzdWJ0eXBlOiAnaDInLFxuICAgICAgICAgICAgaWQ6IGlucHV0U2V0Lm5hbWUsXG4gICAgICAgICAgICBsYWJlbDogaW5wdXRTZXQubGFiZWxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlucHV0U2V0cy5wdXNoKGhlYWRlcik7XG4gICAgICB9XG4gICAgICBpbnB1dFNldHMucHVzaCguLi5pbnB1dFNldC5maWVsZHMpO1xuICAgICAgaW5wdXRTZXRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBwcmVwRmllbGRWYXJzKGZpZWxkLCB0cnVlKTtcbiAgICAgICAgaWYgKGhlbHBlcnMuc3RvcEluZGV4IHx8IGhlbHBlcnMuc3RvcEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgaGVscGVycy5zdG9wSW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZXBGaWVsZFZhcnMoY29udHJvbCwgdHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGQuZWRpdG9yV3JhcCA9IG0oJ2RpdicsIG51bGwsIHtcbiAgICBpZDogYCR7ZGF0YS5mb3JtSUR9LWZvcm0td3JhcGAsXG4gICAgY2xhc3NOYW1lOiAnZm9ybS13cmFwIGZvcm0tYnVpbGRlcicgKyB1dGlscy5tb2JpbGVDbGFzcygpXG4gIH0pO1xuXG4gIGxldCAkZWRpdG9yV3JhcCA9ICQoZC5lZGl0b3JXcmFwKTtcblxuICBsZXQgY2JXcmFwID0gbSgnZGl2JywgZC5jb250cm9scywge1xuICAgIGlkOiBgJHtkYXRhLmZvcm1JRH0tY2Itd3JhcGAsXG4gICAgY2xhc3NOYW1lOiAnY2Itd3JhcCAnICsgZGF0YS5sYXlvdXQuY29udHJvbHNcbiAgfSk7XG5cbiAgaWYgKG9wdHMuc2hvd0FjdGlvbkJ1dHRvbnMpIHtcbiAgICBjb25zdCBidXR0b25zID0gb3B0cy5hY3Rpb25CdXR0b25zLm1hcChidG5EYXRhID0+IHtcbiAgICAgIGlmIChidG5EYXRhLmlkICYmIG9wdHMuZGlzYWJsZWRBY3Rpb25CdXR0b25zLmluZGV4T2YoYnRuRGF0YS5pZCkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLnByb2Nlc3NBY3Rpb25CdXR0b25zKGJ0bkRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1BY3Rpb25zID0gZC5mb3JtQWN0aW9ucyA9IG0oJ2RpdicsIGJ1dHRvbnMsIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Zvcm0tYWN0aW9ucyBidG4tZ3JvdXAnXG4gICAgfSk7XG5cbiAgICBjYldyYXAuYXBwZW5kQ2hpbGQoZm9ybUFjdGlvbnMpO1xuICB9XG5cbiAgbGV0IHN0YWdlV3JhcCA9IG0oJ2RpdicsIFtkLnN0YWdlLCBjYldyYXBdLCB7XG4gICAgaWQ6IGAke2RhdGEuZm9ybUlEfS1zdGFnZS13cmFwYCxcbiAgICBjbGFzc05hbWU6ICdzdGFnZS13cmFwICcgKyBkYXRhLmxheW91dC5zdGFnZVxuICB9KTtcblxuICAkZWRpdG9yV3JhcC5hcHBlbmQoc3RhZ2VXcmFwLCBjYldyYXApO1xuXG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICAkKGVsZW1lbnQpLmFwcGVuZCgkZWRpdG9yV3JhcCk7XG4gIH0gZWxzZSB7XG4gICAgJChlbGVtZW50KS5yZXBsYWNlV2l0aCgkZWRpdG9yV3JhcCk7XG4gIH1cblxuICBsZXQgc2F2ZUFuZFVwZGF0ZSA9IHV0aWxzLmRlYm91bmNlKGV2dCA9PiB7XG4gICAgaWYgKGV2dCkge1xuICAgICAgaWYgKGV2dC50eXBlID09PSAna2V5dXAnICYmIGV2dC50YXJnZXQubmFtZSA9PT0gJ2NsYXNzTmFtZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBsZXQgJGZpZWxkID0gJChldnQudGFyZ2V0KS5jbG9zZXN0KCcuZm9ybS1maWVsZCcpO1xuICAgICAgaGVscGVycy51cGRhdGVQcmV2aWV3KCRmaWVsZCk7XG4gICAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFNhdmUgZmllbGQgb24gY2hhbmdlXG4gICRzdGFnZS5vbignY2hhbmdlIGJsdXIga2V5dXAnLCAnLmZvcm0tZWxlbWVudHMgaW5wdXQsIC5mb3JtLWVsZW1lbnRzIHNlbGVjdCwgLmZvcm0tZWxlbWVudHMgdGV4dGFyZWEnLCBzYXZlQW5kVXBkYXRlKTtcblxuICAkKCdsaScsIGQuY29udHJvbHMpLmNsaWNrKGV2dCA9PiB7XG4gICAgbGV0ICRjb250cm9sID0gJChldnQudGFyZ2V0KS5jbG9zZXN0KCdsaScpO1xuICAgIGhlbHBlcnMuc3RvcEluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHByb2Nlc3NDb250cm9sKCRjb250cm9sKTtcbiAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFwcGVuZCBhbmQgcHJlcGVuZCBvcHRpb25zIGlmIG5lY2Vzc2FyeVxuICBsZXQgbm9uRWRpdGFibGVGaWVsZHMgPSAoKSA9PiB7XG4gICAgbGV0IGNhbmNlbEFycmF5ID0gW107XG4gICAgY29uc3QgZGlzYWJsZWRGaWVsZCA9IHR5cGUgPT5cbiAgICB1dGlscy5tYXJrdXAoJ2xpJywgb3B0c1t0eXBlXSwge1xuICAgICAgY2xhc3NOYW1lOiBgZGlzYWJsZWQtZmllbGQgZm9ybS0ke3R5cGV9YFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdHMucHJlcGVuZCAmJiAhJCgnLmRpc2FibGVkLWZpZWxkLmZvcm0tcHJlcGVuZCcsIGQuc3RhZ2UpLmxlbmd0aCkge1xuICAgICAgY2FuY2VsQXJyYXkucHVzaCh0cnVlKTtcbiAgICAgICRzdGFnZS5wcmVwZW5kKGRpc2FibGVkRmllbGQoJ3ByZXBlbmQnKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuYXBwZW5kICYmICEkKCcuZGlzYWJsZWQtZmllbGQuZm9ybS0uYXBwZW5kJywgZC5zdGFnZSkubGVuZ3RoKSB7XG4gICAgICBjYW5jZWxBcnJheS5wdXNoKHRydWUpO1xuICAgICAgJHN0YWdlLmFwcGVuZChkaXNhYmxlZEZpZWxkKCdhcHBlbmQnKSk7XG4gICAgfVxuXG4gICAgaGVscGVycy5kaXNhYmxlZFRUKGQuc3RhZ2UpO1xuICAgIHJldHVybiBjYW5jZWxBcnJheS5zb21lKGVsZW0gPT4gZWxlbSA9PT0gdHJ1ZSk7XG4gIH07XG5cbiAgbGV0IHByZXBGaWVsZFZhcnMgPSBmdW5jdGlvbigkZmllbGQsIGlzTmV3ID0gZmFsc2UpIHtcbiAgICBsZXQgZmllbGQgPSB7fTtcbiAgICBpZiAoJGZpZWxkIGluc3RhbmNlb2YgalF1ZXJ5KSB7XG4gICAgICBsZXQge2F0dHJzLCBsYWJlbH0gPSBhRmllbGRzWyRmaWVsZFswXS5kYXRhc2V0LnR5cGVdO1xuICAgICAgaWYgKGFGaWVsZHNbJGZpZWxkWzBdLmRhdGFzZXQudHlwZV0pIHtcbiAgICAgICAgZmllbGQgPSBPYmplY3QuYXNzaWduKHt9LCBhdHRycyk7XG4gICAgICAgIGZpZWxkLmxhYmVsID0gbGFiZWw7XG4gICAgICB9IGVsc2UgeyAvLyBpcyBkYXRhVHlwZSBYTUxcbiAgICAgICAgbGV0IGF0dHJzID0gJGZpZWxkWzBdLmF0dHJpYnV0ZXM7XG4gICAgICAgIGlmICghaXNOZXcpIHtcbiAgICAgICAgICBmaWVsZC52YWx1ZXMgPSAkZmllbGQuY2hpbGRyZW4oKS5tYXAoKGluZGV4LCBlbGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBsYWJlbDogJChlbGVtKS50ZXh0KCksXG4gICAgICAgICAgICAgIHZhbHVlOiAkKGVsZW0pLmF0dHIoJ3ZhbHVlJyksXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBCb29sZWFuKCQoZWxlbSkuYXR0cignc2VsZWN0ZWQnKSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gYXR0cnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBmaWVsZFthdHRyc1tpXS5uYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkID0gT2JqZWN0LmFzc2lnbih7fSwgJGZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpZWxkLm5hbWUpIHtcbiAgICAgIGZpZWxkLm5hbWUgPSB1dGlscy5uYW1lQXR0cihmaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmV3ICYmIHV0aWxzLmluQXJyYXkoZmllbGQudHlwZSxcbiAgICAgIFsndGV4dCcsXG4gICAgICAgJ251bWJlcicsXG4gICAgICAgJ2ZpbGUnLFxuICAgICAgICdkYXRlJyxcbiAgICAgICAnc2VsZWN0JyxcbiAgICAgICAndGV4dGFyZWEnLFxuICAgICAgICdhdXRvY29tcGxldGUnXSkpIHtcbiAgICAgIGZpZWxkLmNsYXNzTmFtZSA9IGZpZWxkLmNsYXNzTmFtZSB8fCAnZm9ybS1jb250cm9sJztcbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGQuY2xhc3NOYW1lID0gZmllbGQuY2xhc3NOYW1lO1xuICAgIH1cblxuICAgIGxldCBtYXRjaCA9IC8oPzpefFxccylidG4tKC4qPykoPzpcXHN8JCkvZy5leGVjKGZpZWxkLmNsYXNzTmFtZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBmaWVsZC5zdHlsZSA9IG1hdGNoWzFdO1xuICAgIH1cblxuICAgIHV0aWxzLmVzY2FwZUF0dHJzKGZpZWxkKTtcblxuICAgIGFwcGVuZE5ld0ZpZWxkKGZpZWxkLCBpc05ldyk7XG5cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnRzLmZpZWxkQWRkZWQpO1xuICAgIH1cblxuICAgIHN0YWdlV3JhcC5jbGFzc0xpc3QucmVtb3ZlKCdlbXB0eScpO1xuICB9O1xuXG4gIC8vIFBhcnNlIHNhdmVkIFhNTCB0ZW1wbGF0ZSBkYXRhXG4gIGxldCBsb2FkRmllbGRzID0gZnVuY3Rpb24oZm9ybURhdGEpIHtcbiAgICBmb3JtRGF0YSA9IGhlbHBlcnMuZ2V0RGF0YShmb3JtRGF0YSk7XG4gICAgaWYgKGZvcm1EYXRhICYmIGZvcm1EYXRhLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZmllbGREYXRhID0gdXRpbHMudHJpbU9iaihmb3JtRGF0YVtpXSk7XG4gICAgICAgIHByZXBGaWVsZFZhcnMoZmllbGREYXRhKTtcbiAgICAgIH1cbiAgICAgIHN0YWdlV3JhcC5jbGFzc0xpc3QucmVtb3ZlKCdlbXB0eScpO1xuICAgIH0gZWxzZSBpZiAob3B0cy5kZWZhdWx0RmllbGRzICYmIG9wdHMuZGVmYXVsdEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIC8vIExvYWQgZGVmYXVsdCBmaWVsZHMgaWYgbm9uZSBhcmUgc2V0XG4gICAgICBvcHRzLmRlZmF1bHRGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiBwcmVwRmllbGRWYXJzKGZpZWxkKSk7XG4gICAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LnJlbW92ZSgnZW1wdHknKTtcbiAgICB9IGVsc2UgaWYgKCFvcHRzLnByZXBlbmQgJiYgIW9wdHMuYXBwZW5kKSB7XG4gICAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LmFkZCgnZW1wdHknKTtcbiAgICAgIHN0YWdlV3JhcC5kYXRhc2V0LmNvbnRlbnQgPSBpMThuLmdldFN0YXJ0ZWQ7XG4gICAgfVxuICAgIGhlbHBlcnMuc2F2ZS5jYWxsKGhlbHBlcnMpO1xuXG4gICAgaWYgKG5vbkVkaXRhYmxlRmllbGRzKCkpIHtcbiAgICAgIHN0YWdlV3JhcC5jbGFzc0xpc3QucmVtb3ZlKCdlbXB0eScpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQWRkIGRhdGEgZm9yIGZpZWxkIHdpdGggb3B0aW9ucyBbc2VsZWN0LCBjaGVja2JveC1ncm91cCwgcmFkaW8tZ3JvdXBdXG4gICAqXG4gICAqIEB0b2RvICAgcmVmYWN0b3IgdGhpcyBuYXN0eSB+Y3JhcH4gY29kZSwgaXRzIGFjdHVhbGx5IHBhaW5mdWwgdG8gbG9vayBhdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGZpZWxkIG9wdGlvbnMgbWFya3VwXG4gICAqL1xuICBsZXQgZmllbGRPcHRpb25zID0gZnVuY3Rpb24oZmllbGREYXRhKSB7XG4gICAgbGV0IG9wdGlvbkFjdGlvbnMgPSBbXG4gICAgICAgIHV0aWxzLm1hcmt1cCgnYScsIGkxOG4uYWRkT3B0aW9uLCB7Y2xhc3NOYW1lOiAnYWRkIGFkZC1vcHQnfSlcbiAgICAgIF07XG4gICAgbGV0IGZpZWxkT3B0aW9ucyA9IFtcbiAgICAgIGA8bGFiZWwgY2xhc3M9XCJmYWxzZS1sYWJlbFwiPiR7aTE4bi5zZWxlY3RPcHRpb25zfTwvbGFiZWw+YFxuICAgIF07XG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IGZpZWxkRGF0YS5tdWx0aXBsZSB8fCAoZmllbGREYXRhLnR5cGUgPT09ICdjaGVja2JveC1ncm91cCcpO1xuICAgIGNvbnN0IG9wdGlvbkRhdGFUZW1wbGF0ZSA9IGxhYmVsID0+IHtcbiAgICAgIGxldCBvcHRpb25EYXRhID0ge1xuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIHZhbHVlOiB1dGlscy5oeXBoZW5DYXNlKGxhYmVsKVxuICAgICAgfTtcblxuICAgICAgaWYgKGZpZWxkRGF0YS50eXBlICE9PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgICBvcHRpb25EYXRhLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcHRpb25EYXRhO1xuICAgIH07XG5cbiAgICBpZiAoIWZpZWxkRGF0YS52YWx1ZXMgfHwgIWZpZWxkRGF0YS52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICBsZXQgZGVmYXVsdE9wdENvdW50ID0gdXRpbHMuaW5BcnJheShmaWVsZERhdGEudHlwZSwgWydjaGVja2JveC1ncm91cCcsICdjaGVja2JveCddKSA/IFsxXSA6IFsxLCAyLCAzXTtcbiAgICAgIGZpZWxkRGF0YS52YWx1ZXMgPSBkZWZhdWx0T3B0Q291bnQubWFwKGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgIGxldCBsYWJlbCA9IGAke2kxOG4ub3B0aW9ufSAke2luZGV4fWA7XG4gICAgICAgIHJldHVybiBvcHRpb25EYXRhVGVtcGxhdGUobGFiZWwpO1xuICAgICAgfSk7XG5cbiAgICBsZXQgZmlyc3RPcHRpb24gPSBmaWVsZERhdGEudmFsdWVzWzBdO1xuICAgICAgaWYgKGZpcnN0T3B0aW9uLmhhc093blByb3BlcnR5KCdzZWxlY3RlZCcpKSB7XG4gICAgICAgIGZpcnN0T3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZW5zdXJlIG9wdGlvbiBkYXRhIGlzIGhhcyBhbGwgcmVxdWlyZWQga2V5c1xuICAgICAgZmllbGREYXRhLnZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiBPYmplY3QuYXNzaWduKHt9LCB7c2VsZWN0ZWQ6IGZhbHNlfSwgb3B0aW9uKSk7XG4gICAgfVxuXG4gICAgZmllbGRPcHRpb25zLnB1c2goJzxkaXYgY2xhc3M9XCJzb3J0YWJsZS1vcHRpb25zLXdyYXBcIj4nKTtcblxuICAgIGZpZWxkT3B0aW9ucy5wdXNoKCc8b2wgY2xhc3M9XCJzb3J0YWJsZS1vcHRpb25zXCI+Jyk7XG4gICAgdXRpbHMuZm9yRWFjaChmaWVsZERhdGEudmFsdWVzLCBpID0+IHtcbiAgICAgIGZpZWxkT3B0aW9ucy5wdXNoKHNlbGVjdEZpZWxkT3B0aW9ucyhmaWVsZERhdGEubmFtZSwgZmllbGREYXRhLnZhbHVlc1tpXSwgaXNNdWx0aXBsZSkpO1xuICAgIH0pO1xuICAgIGZpZWxkT3B0aW9ucy5wdXNoKCc8L29sPicpO1xuICAgIGZpZWxkT3B0aW9ucy5wdXNoKHV0aWxzLm1hcmt1cCgnZGl2Jywgb3B0aW9uQWN0aW9ucywge2NsYXNzTmFtZTogJ29wdGlvbi1hY3Rpb25zJ30pLm91dGVySFRNTCk7XG4gICAgZmllbGRPcHRpb25zLnB1c2goJzwvZGl2PicpO1xuXG4gICAgcmV0dXJuIHV0aWxzLm1hcmt1cCgnZGl2JywgZmllbGRPcHRpb25zLmpvaW4oJycpLCB7Y2xhc3NOYW1lOiAnZm9ybS1ncm91cCBmaWVsZC1vcHRpb25zJ30pLm91dGVySFRNTDtcbiAgfTtcblxuICBjb25zdCBkZWZhdWx0RmllbGRBdHRycyA9IHR5cGUgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRBdHRycyA9IFtcbiAgICAgICdyZXF1aXJlZCcsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICdwbGFjZWhvbGRlcicsXG4gICAgICAnY2xhc3NOYW1lJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdhY2Nlc3MnLFxuICAgICAgJ3ZhbHVlJ1xuICAgIF07XG4gICAgbGV0IG5vVmFsRmllbGRzID0gWydoZWFkZXInLCAncGFyYWdyYXBoJywgJ2ZpbGUnLCAnYXV0b2NvbXBsZXRlJ10uY29uY2F0KGQub3B0aW9uRmllbGRzKTtcbiAgICBsZXQgdmFsdWVGaWVsZCA9ICF1dGlscy5pbkFycmF5KHR5cGUsIG5vVmFsRmllbGRzKTtcblxuICAgIGNvbnN0IHR5cGVBdHRyc01hcCA9IHtcbiAgICAgIGF1dG9jb21wbGV0ZTogZGVmYXVsdEF0dHJzLmNvbmNhdChbXG4gICAgICAgICdvcHRpb25zJyxcbiAgICAgIF0pLFxuICAgICAgYnV0dG9uOiBbXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdzdWJ0eXBlJyxcbiAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ2FjY2VzcycsXG4gICAgICBdLFxuICAgICAgY2hlY2tib3g6IFtcbiAgICAgICAgJ3JlcXVpcmVkJyxcbiAgICAgICAgJ2xhYmVsJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ3RvZ2dsZScsXG4gICAgICAgICdpbmxpbmUnLFxuICAgICAgICAnY2xhc3NOYW1lJyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnYWNjZXNzJyxcbiAgICAgICAgJ290aGVyJyxcbiAgICAgICAgJ29wdGlvbnMnLFxuICAgICAgXSxcbiAgICAgIHRleHQ6IGRlZmF1bHRBdHRycy5jb25jYXQoW1xuICAgICAgICAnc3VidHlwZScsXG4gICAgICAgICdtYXhsZW5ndGgnLFxuICAgICAgXSksXG4gICAgICBkYXRlOiBkZWZhdWx0QXR0cnMsXG4gICAgICBmaWxlOiBkZWZhdWx0QXR0cnMuY29uY2F0KFtcbiAgICAgICAgJ211bHRpcGxlJ1xuICAgICAgXSksXG4gICAgICBoZWFkZXI6IFtcbiAgICAgICAgJ2xhYmVsJyxcbiAgICAgICAgJ3N1YnR5cGUnLFxuICAgICAgICAnY2xhc3NOYW1lJyxcbiAgICAgICAgJ2FjY2VzcycsXG4gICAgICBdLFxuICAgICAgaGlkZGVuOiBbXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ2FjY2VzcycsXG4gICAgICBdLFxuICAgICAgcGFyYWdyYXBoOiBbXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdzdWJ0eXBlJyxcbiAgICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAgICdhY2Nlc3MnLFxuICAgICAgXSxcbiAgICAgIG51bWJlcjogZGVmYXVsdEF0dHJzLmNvbmNhdChbXG4gICAgICAgICdtaW4nLFxuICAgICAgICAnbWF4JyxcbiAgICAgICAgJ3N0ZXAnLFxuICAgICAgXSksXG4gICAgICBzZWxlY3Q6IGRlZmF1bHRBdHRycy5jb25jYXQoW1xuICAgICAgICAnbXVsdGlwbGUnLFxuICAgICAgICAnb3B0aW9ucycsXG4gICAgICBdKSxcbiAgICAgIHRleHRhcmVhOiBkZWZhdWx0QXR0cnMuY29uY2F0KFtcbiAgICAgICAgJ3N1YnR5cGUnLFxuICAgICAgICAnbWF4bGVuZ3RoJyxcbiAgICAgICAgJ3Jvd3MnLFxuICAgICAgXSksXG5cbiAgICB9O1xuXG4gICAgdHlwZUF0dHJzTWFwWydjaGVja2JveC1ncm91cCddID0gdHlwZUF0dHJzTWFwLmNoZWNrYm94O1xuICAgIHR5cGVBdHRyc01hcFsncmFkaW8tZ3JvdXAnXSA9IHR5cGVBdHRyc01hcC5jaGVja2JveDtcblxuICAgIGxldCB0eXBlQXR0cnMgPSB0eXBlQXR0cnNNYXBbdHlwZV07XG5cbiAgICBpZiAodHlwZSA9PT0gJ3JhZGlvLWdyb3VwJykge1xuICAgICAgdXRpbHMucmVtb3ZlKCd0b2dnbGUnLCB0eXBlQXR0cnMpO1xuICAgIH1cblxuICAgIC8vIEhlbHAgVGV4dCAvIERlc2NyaXB0aW9uIEZpZWxkXG4gICAgaWYgKHV0aWxzLmluQXJyYXkodHlwZSwgWydoZWFkZXInLCAncGFyYWdyYXBoJywgJ2J1dHRvbiddKSkge1xuICAgICAgdXRpbHMucmVtb3ZlKCdkZXNjcmlwdGlvbicsIHR5cGVBdHRycyk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZUZpZWxkKSB7XG4gICAgICB1dGlscy5yZW1vdmUoJ3ZhbHVlJywgdHlwZUF0dHJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZUF0dHJzIHx8IGRlZmF1bHRBdHRycztcbiAgfTtcblxuICAvKipcbiAgICogQnVpbGQgdGhlIGVkaXRhYmxlIHByb3BlcnRpZXMgZm9yIHRoZSBmaWVsZFxuICAgKiBAcGFyYW0gIHtvYmplY3R9IHZhbHVlcyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgYWR2YW5jZWQgZmllbGRzXG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgIG1hcmt1cCBmb3IgYWR2YW5jZWQgZmllbGRzXG4gICAqL1xuICBsZXQgYWR2RmllbGRzID0gdmFsdWVzID0+IHtcbiAgICBsZXQgYWR2RmllbGRzID0gW107XG4gICAgbGV0IGZpZWxkQXR0cnMgPSBkZWZhdWx0RmllbGRBdHRycyh2YWx1ZXMudHlwZSk7XG4gICAgY29uc3QgYWR2RmllbGRNYXAgPSB7XG4gICAgICByZXF1aXJlZDogKCkgPT4gcmVxdWlyZWRGaWVsZCh2YWx1ZXMpLFxuICAgICAgdG9nZ2xlOiAoKSA9PiBib29sQXR0cmlidXRlKCd0b2dnbGUnLCB2YWx1ZXMsIHtmaXJzdDogaTE4bi50b2dnbGV9KSxcbiAgICAgIGlubGluZTogKCkgPT4ge1xuICAgICAgICBsZXQgbGFiZWxzID0ge1xuICAgICAgICAgIGZpcnN0OiBpMThuLmlubGluZSxcbiAgICAgICAgICBzZWNvbmQ6IG1pMThuLmdldCgnaW5saW5lRGVzYycsIHZhbHVlcy50eXBlLnJlcGxhY2UoJy1ncm91cCcsICcnKSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gYm9vbEF0dHJpYnV0ZSgnaW5saW5lJywgdmFsdWVzLCBsYWJlbHMpO1xuICAgICAgfSxcbiAgICAgIGxhYmVsOiAoKSA9PiB0ZXh0QXR0cmlidXRlKCdsYWJlbCcsIHZhbHVlcyksXG4gICAgICBkZXNjcmlwdGlvbjogKCkgPT4gdGV4dEF0dHJpYnV0ZSgnZGVzY3JpcHRpb24nLCB2YWx1ZXMpLFxuICAgICAgc3VidHlwZTogKCkgPT4gc2VsZWN0QXR0cmlidXRlKCdzdWJ0eXBlJywgdmFsdWVzLCBzdWJ0eXBlc1t2YWx1ZXMudHlwZV0pLFxuICAgICAgc3R5bGU6ICgpID0+IGJ0blN0eWxlcyh2YWx1ZXMuc3R5bGUpLFxuICAgICAgcGxhY2Vob2xkZXI6ICgpID0+IHRleHRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJywgdmFsdWVzKSxcbiAgICAgIHJvd3M6ICgpID0+IG51bWJlckF0dHJpYnV0ZSgncm93cycsIHZhbHVlcyksXG4gICAgICBjbGFzc05hbWU6ICgpID0+IHRleHRBdHRyaWJ1dGUoJ2NsYXNzTmFtZScsIHZhbHVlcyksXG4gICAgICBuYW1lOiAoKSA9PiB0ZXh0QXR0cmlidXRlKCduYW1lJywgdmFsdWVzKSxcbiAgICAgIHZhbHVlOiAoKSA9PiB0ZXh0QXR0cmlidXRlKCd2YWx1ZScsIHZhbHVlcyksXG4gICAgICBtYXhsZW5ndGg6ICgpID0+IG51bWJlckF0dHJpYnV0ZSgnbWF4bGVuZ3RoJywgdmFsdWVzKSxcbiAgICAgIGFjY2VzczogKCkgPT4ge1xuICAgICAgICBsZXQgcm9sZXNEaXNwbGF5ID0gdmFsdWVzLnJvbGUgIT09IHVuZGVmaW5lZCA/ICdzdHlsZT1cImRpc3BsYXk6YmxvY2tcIicgOiAnJztcbiAgICAgICAgbGV0IGF2YWlsYWJsZVJvbGVzID0gW1xuICAgICAgICAgIGA8ZGl2IGNsYXNzPVwiYXZhaWxhYmxlLXJvbGVzXCIgJHtyb2xlc0Rpc3BsYXl9PmBcbiAgICAgICAgXTtcbiAgICAgICAgZm9yIChrZXkgaW4gb3B0cy5yb2xlcykge1xuICAgICAgICAgIGlmIChvcHRzLnJvbGVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGxldCBjaGVja2VkID0gdXRpbHMuaW5BcnJheShrZXksIHJvbGVzKSA/ICdjaGVja2VkJyA6ICcnO1xuICAgICAgICAgICAgbGV0IHJvbGVJZCA9IGBmbGQtJHtkYXRhLmxhc3RJRH0tcm9sZXMtJHtrZXl9YDtcbiAgICAgICAgICAgIGF2YWlsYWJsZVJvbGVzLnB1c2goYDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwicm9sZXNbXVwiIHZhbHVlPVwiJHtrZXl9XCIgaWQ9XCIke3JvbGVJZH1cIiAke2NoZWNrZWR9IGNsYXNzPVwicm9sZXMtZmllbGRcIiAvPiA8bGFiZWwgZm9yPVwiJHtyb2xlSWR9XCI+JHtvcHRzLnJvbGVzW2tleV19PC9sYWJlbD48YnIvPmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhdmFpbGFibGVSb2xlcy5wdXNoKCc8L2Rpdj4nKTtcbiAgICAgICAgbGV0IGFjY2Vzc0xhYmVscyA9IHtmaXJzdDogaTE4bi5yb2xlcywgc2Vjb25kOiBpMThuLmxpbWl0Um9sZSwgY29udGVudDogYXZhaWxhYmxlUm9sZXMuam9pbignJyl9O1xuXG4gICAgICAgIHJldHVybiBib29sQXR0cmlidXRlKCdhY2Nlc3MnLCB2YWx1ZXMsIGFjY2Vzc0xhYmVscyk7XG4gICAgICB9LFxuICAgICAgb3RoZXI6ICgpID0+IGJvb2xBdHRyaWJ1dGUoJ290aGVyJywgdmFsdWVzLCB7Zmlyc3Q6IGkxOG4uZW5hYmxlT3RoZXIsIHNlY29uZDogaTE4bi5lbmFibGVPdGhlck1zZ30pLFxuICAgICAgb3B0aW9uczogKCkgPT4gZmllbGRPcHRpb25zKHZhbHVlcylcbiAgICB9O1xuICAgIGxldCBrZXk7XG4gICAgbGV0IHJvbGVzID0gdmFsdWVzLnJvbGUgIT09IHVuZGVmaW5lZCA/IHZhbHVlcy5yb2xlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBsZXQgbnVtQXR0cnMgPSBbJ21pbicsICdtYXgnLCAnc3RlcCddO1xuXG4gICAgaWYgKHZhbHVlcy50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgbnVtQXR0cnMuZm9yRWFjaChudW1BdHRyID0+IHtcbiAgICAgICAgYWR2RmllbGRNYXBbbnVtQXR0cl0gPSAoKSA9PiBudW1iZXJBdHRyaWJ1dGUobnVtQXR0ciwgdmFsdWVzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZXMudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICBhZHZGaWVsZE1hcFsnbXVsdGlwbGUnXSA9ICgpID0+IHtcbiAgICAgICAgbGV0IGxhYmVscyA9IHtcbiAgICAgICAgICBmaXJzdDogaTE4bi5tdWx0aXBsZUZpbGVzLFxuICAgICAgICAgIHNlY29uZDogaTE4bi5hbGxvd011bHRpcGxlRmlsZXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGJvb2xBdHRyaWJ1dGUoJ211bHRpcGxlJywgdmFsdWVzLCBsYWJlbHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLnR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICBhZHZGaWVsZE1hcFsnbXVsdGlwbGUnXSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGJvb2xBdHRyaWJ1dGUoJ211bHRpcGxlJywgdmFsdWVzLCB7Zmlyc3Q6ICcgJywgc2Vjb25kOiBpMThuLnNlbGVjdGlvbnNNZXNzYWdlfSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKGZpZWxkQXR0cnMpLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgbGV0IGF0dHIgPSBmaWVsZEF0dHJzW2luZGV4XTtcbiAgICAgIGxldCB1c2VEZWZhdWx0QXR0ciA9IFt0cnVlXTtcblxuICAgICAgaWYgKG9wdHMudHlwZVVzZXJEaXNhYmxlZEF0dHJzW3ZhbHVlcy50eXBlXSkge1xuICAgICAgICBsZXQgdHlwZURpc2FibGVkQXR0cnMgPSBvcHRzLnR5cGVVc2VyRGlzYWJsZWRBdHRyc1t2YWx1ZXMudHlwZV07XG4gICAgICAgIHVzZURlZmF1bHRBdHRyLnB1c2goIXV0aWxzLmluQXJyYXkoYXR0ciwgdHlwZURpc2FibGVkQXR0cnMpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV0pIHtcbiAgICAgICAgbGV0IHVzZXJBdHRycyA9IE9iamVjdC5rZXlzKG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV0pO1xuICAgICAgICB1c2VEZWZhdWx0QXR0ci5wdXNoKCF1dGlscy5pbkFycmF5KGF0dHIsIHVzZXJBdHRycykpO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaW5BcnJheShhdHRyLCBvcHRzLmRpc2FibGVkQXR0cnMpKSB7XG4gICAgICAgIHVzZURlZmF1bHRBdHRyLnB1c2goZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlRGVmYXVsdEF0dHIuZXZlcnkodXNlID0+IHVzZSA9PT0gdHJ1ZSkpIHtcbiAgICAgICAgYWR2RmllbGRzLnB1c2goYWR2RmllbGRNYXBbYXR0cl0oKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBcHBlbmQgY3VzdG9tIGF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0eXBlVXNlckF0dHJzIG9wdGlvblxuICAgIGlmIChvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdKSB7XG4gICAgICBhZHZGaWVsZHMucHVzaChwcm9jZXNzVHlwZVVzZXJBdHRycyhvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdLCB2YWx1ZXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWR2RmllbGRzLmpvaW4oJycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgdHlwZVVzZXJBdHRyc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IHR5cGVVc2VyQXR0ciBvcHRpb25cbiAgICogQHBhcmFtICB7T2JqZWN0fSB2YWx1ZXMgICAgICAgZmllbGQgYXR0cmlidXRlc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICAgICAgICBtYXJrdXAgZm9yIGN1c3RvbSB1c2VyIGF0dHJpYnV0ZXNcbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NUeXBlVXNlckF0dHJzKHR5cGVVc2VyQXR0ciwgdmFsdWVzKSB7XG4gICAgbGV0IGFkdkZpZWxkID0gW107XG5cbiAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gdHlwZVVzZXJBdHRyKSB7XG4gICAgICBpZiAodHlwZVVzZXJBdHRyLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZSkpIHtcbiAgICAgICAgbGV0IG9yaWcgPSBpMThuW2F0dHJpYnV0ZV07XG4gICAgICAgIGxldCBvcmlnVmFsdWUgPSB0eXBlVXNlckF0dHJbYXR0cmlidXRlXS52YWx1ZTtcbiAgICAgICAgdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0udmFsdWUgPSB2YWx1ZXNbYXR0cmlidXRlXSB8fCB0eXBlVXNlckF0dHJbYXR0cmlidXRlXS52YWx1ZSB8fCAnJztcblxuICAgICAgICBpZiAodHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0ubGFiZWwpIHtcbiAgICAgICAgICBpMThuW2F0dHJpYnV0ZV0gPSB0eXBlVXNlckF0dHJbYXR0cmlidXRlXS5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlVXNlckF0dHJbYXR0cmlidXRlXS5vcHRpb25zKSB7XG4gICAgICAgICAgYWR2RmllbGQucHVzaChzZWxlY3RVc2VyQXR0cnMoYXR0cmlidXRlLCB0eXBlVXNlckF0dHJbYXR0cmlidXRlXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkdkZpZWxkLnB1c2goaW5wdXRVc2VyQXR0cnMoYXR0cmlidXRlLCB0eXBlVXNlckF0dHJbYXR0cmlidXRlXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaTE4blthdHRyaWJ1dGVdID0gb3JpZztcbiAgICAgICAgdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0udmFsdWUgPSBvcmlnVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkdkZpZWxkLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRleHQgaW5wdXQgdmFsdWUgZm9yIGF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhdHRycyBhbHNvIGtub3duIGFzIHZhbHVlc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgIGlucHV0IG1hcmt1cFxuICAgKi9cbiAgZnVuY3Rpb24gaW5wdXRVc2VyQXR0cnMobmFtZSwgYXR0cnMpIHtcbiAgICBsZXQgdGV4dEF0dHJzID0ge1xuICAgICAgICBpZDogbmFtZSArICctJyArIGRhdGEubGFzdElELFxuICAgICAgICB0aXRsZTogYXR0cnMuZGVzY3JpcHRpb24gfHwgYXR0cnMubGFiZWwgfHwgbmFtZS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB0eXBlOiBhdHRycy50eXBlIHx8ICd0ZXh0JyxcbiAgICAgICAgY2xhc3NOYW1lOiBbYGZsZC0ke25hbWV9YF1cbiAgICAgIH07XG4gICAgbGV0IGxhYmVsID0gYDxsYWJlbCBmb3I9XCIke3RleHRBdHRycy5pZH1cIj4ke2kxOG5bbmFtZV19PC9sYWJlbD5gO1xuXG4gICAgaWYgKCF1dGlscy5pbkFycmF5KHRleHRBdHRycy50eXBlLCBbJ2NoZWNrYm94JywgJ2NoZWNrYm94LWdyb3VwJywgJ3JhZGlvLWdyb3VwJ10pKSB7XG4gICAgICB0ZXh0QXR0cnMuY2xhc3NOYW1lLnB1c2goJ2Zvcm0tY29udHJvbCcpO1xuICAgIH1cblxuICAgIHRleHRBdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIGF0dHJzLCB0ZXh0QXR0cnMpO1xuICAgIGxldCB0ZXh0SW5wdXQgPSBgPGlucHV0ICR7dXRpbHMuYXR0clN0cmluZyh0ZXh0QXR0cnMpfT5gO1xuICAgIGxldCBpbnB1dFdyYXAgPSBgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj4ke3RleHRJbnB1dH08L2Rpdj5gO1xuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgJHtuYW1lfS13cmFwXCI+JHtsYWJlbH0ke2lucHV0V3JhcH08L2Rpdj5gO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBpbnB1dCBmb3IgbXVsdGlwbGUgY2hvaWNlIHVzZXIgYXR0cmlidXRlc1xuICAgKiBAdG9kbyAgcmVwbGFjZSB3aXRoIHNlbGVjdEF0dHJcbiAgICogQHBhcmFtICB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICAgc2VsZWN0IG1hcmt1cFxuICAgKi9cbiAgZnVuY3Rpb24gc2VsZWN0VXNlckF0dHJzKG5hbWUsIG9wdGlvbnMpIHtcbiAgICBsZXQgb3B0aXMgPSBPYmplY3Qua2V5cyhvcHRpb25zLm9wdGlvbnMpLm1hcCh2YWwgPT4ge1xuICAgICAgbGV0IGF0dHJzID0ge3ZhbHVlOiB2YWx9O1xuICAgICAgaWYgKHZhbCA9PT0gb3B0aW9ucy52YWx1ZSkge1xuICAgICAgICBhdHRycy5zZWxlY3RlZCA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gYDxvcHRpb24gJHt1dGlscy5hdHRyU3RyaW5nKGF0dHJzKX0+JHtvcHRpb25zLm9wdGlvbnNbdmFsXX08L29wdGlvbj5gO1xuICAgIH0pO1xuICAgIGxldCBzZWxlY3RBdHRycyA9IHtcbiAgICAgIGlkOiBuYW1lICsgJy0nICsgZGF0YS5sYXN0SUQsXG4gICAgICB0aXRsZTogb3B0aW9ucy5kZXNjcmlwdGlvbiB8fCBvcHRpb25zLmxhYmVsIHx8IG5hbWUudG9VcHBlckNhc2UoKSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBjbGFzc05hbWU6IGBmbGQtJHtuYW1lfSBmb3JtLWNvbnRyb2xgXG4gICAgfTtcbiAgICBsZXQgbGFiZWwgPSBgPGxhYmVsIGZvcj1cIiR7c2VsZWN0QXR0cnMuaWR9XCI+JHtpMThuW25hbWVdfTwvbGFiZWw+YDtcblxuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZpbHRlcihwcm9wID0+IHtcbiAgICAgIHJldHVybiAhdXRpbHMuaW5BcnJheShwcm9wLCBbJ3ZhbHVlJywgJ29wdGlvbnMnLCAnbGFiZWwnXSk7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbihhdHRyKSB7XG4gICAgICBzZWxlY3RBdHRyc1thdHRyXSA9IG9wdGlvbnNbYXR0cl07XG4gICAgfSk7XG5cbiAgICBsZXQgc2VsZWN0ID0gYDxzZWxlY3QgJHt1dGlscy5hdHRyU3RyaW5nKHNlbGVjdEF0dHJzKX0+JHtvcHRpcy5qb2luKCcnKX08L3NlbGVjdD5gO1xuICAgIGxldCBpbnB1dFdyYXAgPSBgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj4ke3NlbGVjdH08L2Rpdj5gO1xuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgJHtuYW1lfS13cmFwXCI+JHtsYWJlbH0ke2lucHV0V3JhcH08L2Rpdj5gO1xuICB9XG5cbiAgbGV0IGJvb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZXMsIGxhYmVscykge1xuICAgIGlmIChvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdICYmIG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV1bbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbGFiZWwgPSAodHh0KSA9PiB7XG4gICAgICByZXR1cm4gYDxsYWJlbCBmb3I9XCIke25hbWV9LSR7ZGF0YS5sYXN0SUR9XCI+JHt0eHR9PC9sYWJlbD5gO1xuICAgIH07XG4gICAgbGV0IGNoZWNrZWQgPSAodmFsdWVzW25hbWVdICE9PSB1bmRlZmluZWQgPyAnY2hlY2tlZCcgOiAnJyk7XG4gICAgbGV0IGlucHV0ID0gYDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZsZC0ke25hbWV9XCIgbmFtZT1cIiR7bmFtZX1cIiB2YWx1ZT1cInRydWVcIiAke2NoZWNrZWR9IGlkPVwiJHtuYW1lfS0ke2RhdGEubGFzdElEfVwiLz4gYDtcbiAgICBsZXQgbGVmdCA9IFtdO1xuICAgIGxldCByaWdodCA9IFtcbiAgICAgIGlucHV0XG4gICAgXTtcblxuICAgIGlmIChsYWJlbHMuZmlyc3QpIHtcbiAgICAgIGxlZnQudW5zaGlmdChsYWJlbChsYWJlbHMuZmlyc3QpKTtcbiAgICB9XG5cbiAgICBpZiAobGFiZWxzLnNlY29uZCkge1xuICAgICAgcmlnaHQucHVzaChsYWJlbChsYWJlbHMuc2Vjb25kKSk7XG4gICAgfVxuXG4gICAgaWYgKGxhYmVscy5jb250ZW50KSB7XG4gICAgICByaWdodC5wdXNoKGxhYmVscy5jb250ZW50KTtcbiAgICB9XG5cbiAgICByaWdodC51bnNoaWZ0KCc8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcFwiPicpO1xuICAgIHJpZ2h0LnB1c2goJzwvZGl2PicpO1xuXG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCAke25hbWV9LXdyYXBcIj4ke2xlZnQuY29uY2F0KHJpZ2h0KS5qb2luKCcnKX08L2Rpdj5gO1xuICB9O1xuXG4gIGxldCBidG5TdHlsZXMgPSBmdW5jdGlvbihzdHlsZSkge1xuICAgICAgbGV0IHN0eWxlcyA9IGkxOG4uc3R5bGVzLmJ0bjtcbiAgICAgIGxldCBzdHlsZUZpZWxkID0gJyc7XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBsZXQgc3R5bGVMYWJlbCA9IGA8bGFiZWw+JHtpMThuLnN0eWxlfTwvbGFiZWw+YDtcbiAgICAgIHN0eWxlRmllbGQgKz0gYDxpbnB1dCB2YWx1ZT1cIiR7c3R5bGV9XCIgbmFtZT1cInN0eWxlXCIgdHlwZT1cImhpZGRlblwiIGNsYXNzPVwiYnRuLXN0eWxlXCI+YDtcbiAgICAgIHN0eWxlRmllbGQgKz0gJzxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIj4nO1xuXG4gICAgICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGxldCBjbGFzc0xpc3QgPSBbJ2J0bi14cycsICdidG4nLCBgYnRuLSR7ZWxlbWVudH1gXTtcbiAgICAgICAgaWYgKHN0eWxlID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgY2xhc3NMaXN0LnB1c2goJ3NlbGVjdGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZUZpZWxkICs9IGA8YnV0dG9uIHZhbHVlPVwiJHtlbGVtZW50fVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIiR7Y2xhc3NMaXN0LmpvaW4oJyAnKX1cIj4ke2kxOG4uc3R5bGVzLmJ0bltlbGVtZW50XX08L2J1dHRvbj5gO1xuICAgICAgfSk7XG5cbiAgICAgIHN0eWxlRmllbGQgKz0gJzwvZGl2Pic7XG5cbiAgICAgIHN0eWxlRmllbGQgPSBgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgc3R5bGUtd3JhcFwiPiR7c3R5bGVMYWJlbH0gJHtzdHlsZUZpZWxkfTwvZGl2PmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlRmllbGQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIG51bWJlciBhdHRyaWJ1dGUgdG8gYSBmaWVsZC5cbiAgICogQHBhcmFtICB7U3RyaW5nfSBhdHRyaWJ1dGVcbiAgICogQHBhcmFtICB7T2JqZWN0fSB2YWx1ZXNcbiAgICogQHJldHVybiB7U3RyaW5nfSBtYXJrdXAgZm9yIG51bWJlciBhdHRyaWJ1dGVcbiAgICovXG4gIGxldCBudW1iZXJBdHRyaWJ1dGUgPSBmdW5jdGlvbihhdHRyaWJ1dGUsIHZhbHVlcykge1xuICAgIGlmIChvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdICYmIG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV1bYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBhdHRyVmFsID0gdmFsdWVzW2F0dHJpYnV0ZV07XG4gICAgbGV0IGF0dHJMYWJlbCA9IGkxOG5bYXR0cmlidXRlXSB8fCBhdHRyaWJ1dGU7XG4gICAgbGV0IHBsYWNlaG9sZGVyID0gaTE4bltgcGxhY2Vob2xkZXIuJHthdHRyaWJ1dGV9YF07XG4gICAgbGV0IGlucHV0Q29uZmlnID0ge1xuICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICB2YWx1ZTogYXR0clZhbCxcbiAgICAgIG5hbWU6IGF0dHJpYnV0ZSxcbiAgICAgIG1pbjogJzAnLFxuICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgY2xhc3NOYW1lOiBgZmxkLSR7YXR0cmlidXRlfSBmb3JtLWNvbnRyb2xgLFxuICAgICAgaWQ6IGAke2F0dHJpYnV0ZX0tJHtkYXRhLmxhc3RJRH1gXG4gICAgfTtcbiAgICBsZXQgbnVtYmVyQXR0cmlidXRlID0gYDxpbnB1dCAke3V0aWxzLmF0dHJTdHJpbmcodXRpbHMudHJpbU9iaihpbnB1dENvbmZpZykpfT5gO1xuICAgIGxldCBpbnB1dFdyYXAgPSBgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj4ke251bWJlckF0dHJpYnV0ZX08L2Rpdj5gO1xuXG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCAke2F0dHJpYnV0ZX0td3JhcFwiPjxsYWJlbCBmb3I9XCIke2lucHV0Q29uZmlnLmlkfVwiPiR7YXR0ckxhYmVsfTwvbGFiZWw+ICR7aW5wdXRXcmFwfTwvZGl2PmA7XG4gIH07XG5cbiAgLyoqXG4gICAqIHNlbGVjdEF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGF0dHJpYnV0ZSAgYXR0cmlidXRlIG5hbWVcbiAgICogQHBhcmFtICB7T2JqZWN0fSB2YWx1ZXMgICAgIGFrYSBhdHRyc1xuICAgKiBAcGFyYW0gIHtBcnJheX0gb3B0aW9uRGF0YSAgc2VsZWN0IGZpZWxkIG9wdGlvbiBkYXRhXG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgICAgICBzZWxlY3QgaW5wdXQgbWFrcnVwXG4gICAqL1xuICBsZXQgc2VsZWN0QXR0cmlidXRlID0gZnVuY3Rpb24oYXR0cmlidXRlLCB2YWx1ZXMsIG9wdGlvbkRhdGEpIHtcbiAgICBpZiAob3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXSAmJiBvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdW2F0dHJpYnV0ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHNlbGVjdE9wdGlvbnMgPSBvcHRpb25EYXRhLm1hcCgob3B0aW9uLCBpKSA9PiB7XG4gICAgICBsZXQgb3B0aW9uQXR0cnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbGFiZWw6IGAke2kxOG4ub3B0aW9ufSAke2l9YCxcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgfSwgb3B0aW9uKTtcbiAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlc1thdHRyaWJ1dGVdKSB7XG4gICAgICAgIG9wdGlvbkF0dHJzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgPG9wdGlvbiAke3V0aWxzLmF0dHJTdHJpbmcodXRpbHMudHJpbU9iaihvcHRpb25BdHRycykpfT4ke29wdGlvbkF0dHJzLmxhYmVsfTwvb3B0aW9uPmA7XG4gICAgfSk7XG4gICAgbGV0IHNlbGVjdEF0dHJzID0ge1xuICAgICAgICBpZDogYXR0cmlidXRlICsgJy0nICsgZGF0YS5sYXN0SUQsXG4gICAgICAgIG5hbWU6IGF0dHJpYnV0ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBgZmxkLSR7YXR0cmlidXRlfSBmb3JtLWNvbnRyb2xgXG4gICAgICB9O1xuICAgIGxldCBsYWJlbCA9IGA8bGFiZWwgZm9yPVwiJHtzZWxlY3RBdHRycy5pZH1cIj4ke2kxOG5bYXR0cmlidXRlXSB8fCB1dGlscy5jYXBpdGFsaXplKGF0dHJpYnV0ZSl9PC9sYWJlbD5gO1xuICAgIGxldCBzZWxlY3QgPSBgPHNlbGVjdCAke3V0aWxzLmF0dHJTdHJpbmcoc2VsZWN0QXR0cnMpfT4ke3NlbGVjdE9wdGlvbnMuam9pbignJyl9PC9zZWxlY3Q+YDtcbiAgICBsZXQgaW5wdXRXcmFwID0gYDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+JHtzZWxlY3R9PC9kaXY+YDtcblxuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgJHtzZWxlY3RBdHRycy5uYW1lfS13cmFwXCI+JHtsYWJlbH0ke2lucHV0V3JhcH08L2Rpdj5gO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzb21lIHRleHQgaW5wdXRzIGZvciBmaWVsZCBhdHRyaWJ1dGVzLCAqKndpbGwgYmUgcmVwbGFjZWQqKlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqL1xuICBsZXQgdGV4dEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dHJpYnV0ZSwgdmFsdWVzKSB7XG4gICAgaWYgKG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV0gJiYgb3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXVthdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBsYWNlaG9sZGVyRmllbGRzID0gW1xuICAgICAgJ3RleHQnLFxuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICdzZWxlY3QnLFxuICAgICAgJ2F1dG9jb21wbGV0ZSdcbiAgICBdO1xuXG4gICAgbGV0IG5vTmFtZSA9IFtcbiAgICAgICdoZWFkZXInLFxuICAgICAgJ3BhcmFncmFwaCdcbiAgICBdO1xuXG4gICAgbGV0IHRleHRBcmVhID0gWydwYXJhZ3JhcGgnXTtcblxuICAgIGxldCBhdHRyVmFsID0gdmFsdWVzW2F0dHJpYnV0ZV0gfHwgJyc7XG4gICAgbGV0IGF0dHJMYWJlbCA9IGkxOG5bYXR0cmlidXRlXTtcblxuICAgIGlmIChhdHRyaWJ1dGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIGlmICh1dGlscy5pbkFycmF5KHZhbHVlcy50eXBlLCB0ZXh0QXJlYSkpIHtcbiAgICAgICAgYXR0ckxhYmVsID0gaTE4bi5jb250ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0clZhbCA9IHV0aWxzLnBhcnNlZEh0bWwodmFsdWVzW2F0dHJpYnV0ZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdWJ0eXBlcy5oZWFkZXIpIHtcbiAgICAgIG5vTmFtZSA9IG5vTmFtZS5jb25jYXQoc3VidHlwZXMuaGVhZGVyKTtcbiAgICB9XG5cbiAgICBsZXQgcGxhY2Vob2xkZXIgPSBpMThuW2BwbGFjZWhvbGRlci4ke2F0dHJpYnV0ZX1gXSB8fCAnJztcbiAgICBsZXQgYXR0cmlidXRlZmllbGQgPSAnJztcbiAgICBsZXQgbm9NYWtlQXR0ciA9IFtdO1xuXG4gICAgLy8gRmllbGQgaGFzIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZVxuICAgIGlmIChhdHRyaWJ1dGUgPT09ICdwbGFjZWhvbGRlcicgJiYgIXV0aWxzLmluQXJyYXkodmFsdWVzLnR5cGUsIHBsYWNlaG9sZGVyRmllbGRzKSkge1xuICAgICAgbm9NYWtlQXR0ci5wdXNoKHRydWUpO1xuICAgIH1cblxuICAgIC8vIEZpZWxkIGhhcyBuYW1lIGF0dHJpYnV0ZVxuICAgIGlmIChhdHRyaWJ1dGUgPT09ICduYW1lJyAmJiB1dGlscy5pbkFycmF5KHZhbHVlcy50eXBlLCBub05hbWUpKSB7XG4gICAgICBub01ha2VBdHRyLnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCFub01ha2VBdHRyLnNvbWUoZWxlbSA9PiBlbGVtID09PSB0cnVlKSkge1xuICAgICAgbGV0IGlucHV0Q29uZmlnID0ge1xuICAgICAgICBuYW1lOiBhdHRyaWJ1dGUsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgICAgY2xhc3NOYW1lOiBgZmxkLSR7YXR0cmlidXRlfSBmb3JtLWNvbnRyb2xgLFxuICAgICAgICBpZDogYCR7YXR0cmlidXRlfS0ke2RhdGEubGFzdElEfWBcbiAgICAgIH07XG4gICAgICBsZXQgYXR0cmlidXRlTGFiZWwgPSBgPGxhYmVsIGZvcj1cIiR7aW5wdXRDb25maWcuaWR9XCI+JHthdHRyTGFiZWx9PC9sYWJlbD5gO1xuXG4gICAgICBpZiAoYXR0cmlidXRlID09PSAnbGFiZWwnKSB7XG4gICAgICAgIGF0dHJpYnV0ZWZpZWxkICs9IGA8ZGl2IGNvbnRlbnRlZGl0YWJsZSAke3V0aWxzLmF0dHJTdHJpbmcoaW5wdXRDb25maWcpfT4ke2F0dHJWYWx9PC9kaXY+YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0Q29uZmlnLnZhbHVlID0gYXR0clZhbDtcbiAgICAgICAgaW5wdXRDb25maWcudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgYXR0cmlidXRlZmllbGQgKz0gYDxpbnB1dCAke3V0aWxzLmF0dHJTdHJpbmcoaW5wdXRDb25maWcpfT5gO1xuICAgICAgfVxuXG4gICAgICBsZXQgaW5wdXRXcmFwID0gYDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+JHthdHRyaWJ1dGVmaWVsZH08L2Rpdj5gO1xuXG4gICAgICBsZXQgdmlzaWJpbGl0eSA9ICdibG9jayc7XG4gICAgICBpZiAoYXR0cmlidXRlID09PSAndmFsdWUnKSB7XG4gICAgICAgIHZpc2liaWxpdHkgPSB2YWx1ZXMuc3VidHlwZSAmJiB2YWx1ZXMuc3VidHlwZSA9PT0gJ3F1aWxsJyAmJiAnbm9uZSc7XG4gICAgICB9XG5cbiAgICAgIGF0dHJpYnV0ZWZpZWxkID0gYDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICR7YXR0cmlidXRlfS13cmFwXCIgc3R5bGU9XCJkaXNwbGF5OiAke3Zpc2liaWxpdHl9XCI+JHthdHRyaWJ1dGVMYWJlbH0gJHtpbnB1dFdyYXB9PC9kaXY+YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlZmllbGQ7XG4gIH07XG5cbiAgbGV0IHJlcXVpcmVkRmllbGQgPSBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICBsZXQgbm9SZXF1aXJlID0gW1xuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ3BhcmFncmFwaCcsXG4gICAgICAgICdidXR0b24nXG4gICAgICBdO1xuICAgIGxldCBub01ha2UgPSBbXTtcbiAgICBsZXQgcmVxdWlyZUZpZWxkID0gJyc7XG5cbiAgICBpZiAodXRpbHMuaW5BcnJheSh2YWx1ZXMudHlwZSwgbm9SZXF1aXJlKSkge1xuICAgICAgbm9NYWtlLnB1c2godHJ1ZSk7XG4gICAgfVxuICAgIGlmICghbm9NYWtlLnNvbWUoZWxlbSA9PiBlbGVtID09PSB0cnVlKSkge1xuICAgICAgcmVxdWlyZUZpZWxkID0gYm9vbEF0dHJpYnV0ZSgncmVxdWlyZWQnLCB2YWx1ZXMsIHtmaXJzdDogaTE4bi5yZXF1aXJlZH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1aXJlRmllbGQ7XG4gIH07XG5cbiAgLy8gQXBwZW5kIHRoZSBuZXcgZmllbGQgdG8gdGhlIGVkaXRvclxuICBsZXQgYXBwZW5kTmV3RmllbGQgPSBmdW5jdGlvbih2YWx1ZXMsIGlzTmV3ID0gdHJ1ZSkge1xuICAgIGxldCB0eXBlID0gdmFsdWVzLnR5cGUgfHwgJ3RleHQnO1xuICAgIGxldCBsYWJlbCA9IHZhbHVlcy5sYWJlbCB8fCBpMThuW3R5cGVdIHx8IGkxOG4ubGFiZWw7XG4gICAgbGV0IGRlbEJ0biA9IG0oJ2EnLCBpMThuLnJlbW92ZSwge1xuICAgICAgICBpZDogJ2RlbF8nICsgZGF0YS5sYXN0SUQsXG4gICAgICAgIGNsYXNzTmFtZTogJ2RlbC1idXR0b24gYnRuIGRlbGV0ZS1jb25maXJtJyxcbiAgICAgICAgdGl0bGU6IGkxOG4ucmVtb3ZlTWVzc2FnZVxuICAgICAgfSk7XG4gICAgbGV0IHRvZ2dsZUJ0biA9IG0oJ2EnLCBudWxsLCB7XG4gICAgICBpZDogZGF0YS5sYXN0SUQgKyAnLWVkaXQnLFxuICAgICAgY2xhc3NOYW1lOiAndG9nZ2xlLWZvcm0gYnRuIGljb24tcGVuY2lsJyxcbiAgICAgIHRpdGxlOiBpMThuLmhpZGVcbiAgICB9KTtcbiAgICBsZXQgY29weUJ0biA9IG0oJ2EnLCBudWxsLCB7XG4gICAgICBpZDogZGF0YS5sYXN0SUQgKyAnLWNvcHknLFxuICAgICAgY2xhc3NOYW1lOiAnY29weS1idXR0b24gYnRuIGljb24tY29weScsXG4gICAgICB0aXRsZTogaTE4bi5jb3B5QnV0dG9uVG9vbHRpcFxuICAgIH0pO1xuXG4gICAgbGV0IGxpQ29udGVudHMgPSBtKFxuICAgICAgJ2RpdicsIFt0b2dnbGVCdG4sIGNvcHlCdG4sIGRlbEJ0bl0sIHtjbGFzc05hbWU6ICdmaWVsZC1hY3Rpb25zJ31cbiAgICApLm91dGVySFRNTDtcblxuICAgIGxpQ29udGVudHMgKz0gYDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+JHt1dGlscy5wYXJzZWRIdG1sKGxhYmVsKX08L2xhYmVsPmA7XG4gICAgbGV0IHJlcXVpcmVkRGlzcGxheSA9IHZhbHVlcy5yZXF1aXJlZCA/ICdzdHlsZT1cImRpc3BsYXk6aW5saW5lXCInIDogJyc7XG4gICAgbGlDb250ZW50cyArPSBgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZC1hc3Rlcmlza1wiICR7cmVxdWlyZWREaXNwbGF5fT4gKjwvc3Bhbj5gO1xuXG4gICAgbGV0IGRlc2NBdHRycyA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ3Rvb2x0aXAtZWxlbWVudCcsXG4gICAgICB0b29sdGlwOiB2YWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICBzdHlsZTogdmFsdWVzLmRlc2NyaXB0aW9uID8gJ2Rpc3BsYXk6aW5saW5lLWJsb2NrJyA6ICdkaXNwbGF5Om5vbmUnXG4gICAgfTtcbiAgICBsaUNvbnRlbnRzICs9IGA8c3BhbiAke3V0aWxzLmF0dHJTdHJpbmcoZGVzY0F0dHJzKX0+Pzwvc3Bhbj5gO1xuXG4gICAgbGlDb250ZW50cyArPSBtKCdkaXYnLCAnJywge2NsYXNzTmFtZTogJ3ByZXYtaG9sZGVyJ30pLm91dGVySFRNTDtcbiAgICBsaUNvbnRlbnRzICs9IGA8ZGl2IGlkPVwiJHtkYXRhLmxhc3RJRH0taG9sZGVyXCIgY2xhc3M9XCJmcm0taG9sZGVyXCI+YDtcbiAgICBsaUNvbnRlbnRzICs9ICc8ZGl2IGNsYXNzPVwiZm9ybS1lbGVtZW50c1wiPic7XG5cbiAgICBsaUNvbnRlbnRzICs9IGFkdkZpZWxkcyh2YWx1ZXMpO1xuICAgIGxpQ29udGVudHMgKz0gbSgnYScsIGkxOG4uY2xvc2UsIHtjbGFzc05hbWU6ICdjbG9zZS1maWVsZCd9KS5vdXRlckhUTUw7XG5cbiAgICBsaUNvbnRlbnRzICs9ICc8L2Rpdj4nO1xuICAgIGxpQ29udGVudHMgKz0gJzwvZGl2Pic7XG5cbiAgICBsZXQgZmllbGQgPSBtKCdsaScsIGxpQ29udGVudHMsIHtcbiAgICAgICAgJ2NsYXNzJzogdHlwZSArICctZmllbGQgZm9ybS1maWVsZCcsXG4gICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgaWQ6IGRhdGEubGFzdElEXG4gICAgICB9KTtcbiAgICBsZXQgJGxpID0gJChmaWVsZCk7XG5cbiAgICAkbGkuZGF0YSgnZmllbGREYXRhJywge2F0dHJzOiB2YWx1ZXN9KTtcblxuICAgIGlmICh0eXBlb2YgaGVscGVycy5zdG9wSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAkKCc+IGxpJywgZC5zdGFnZSkuZXEoaGVscGVycy5zdG9wSW5kZXgpLmJlZm9yZSgkbGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkc3RhZ2UuYXBwZW5kKCRsaSk7XG4gICAgfVxuXG4gICAgJCgnLnNvcnRhYmxlLW9wdGlvbnMnLCAkbGkpXG4gICAgLnNvcnRhYmxlKHt1cGRhdGU6ICgpID0+IGhlbHBlcnMudXBkYXRlUHJldmlldygkbGkpfSk7XG5cbiAgICBoZWxwZXJzLnVwZGF0ZVByZXZpZXcoJGxpKTtcblxuICAgIGlmIChvcHRzLnR5cGVVc2VyRXZlbnRzW3R5cGVdICYmIG9wdHMudHlwZVVzZXJFdmVudHNbdHlwZV0ub25hZGQpIHtcbiAgICAgIG9wdHMudHlwZVVzZXJFdmVudHNbdHlwZV0ub25hZGQoZmllbGQpO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmVkaXRPbkFkZCAmJiBpc05ldykge1xuICAgICAgaGVscGVycy5jbG9zZUFsbEVkaXQoKTtcbiAgICAgIGhlbHBlcnMudG9nZ2xlRWRpdChkYXRhLmxhc3RJRCwgZmFsc2UpO1xuICAgICAgLy8gZmllbGQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB9XG5cbiAgICBkYXRhLmxhc3RJRCA9IGhlbHBlcnMuaW5jcmVtZW50SWQoZGF0YS5sYXN0SUQpO1xuICB9O1xuXG4gIC8vIFNlbGVjdCBmaWVsZCBodG1sLCBzaW5jZSB0aGVyZSBtYXkgYmUgbXVsdGlwbGVcbiAgbGV0IHNlbGVjdEZpZWxkT3B0aW9ucyA9IGZ1bmN0aW9uKG5hbWUsIG9wdGlvbkRhdGEsIG11bHRpcGxlU2VsZWN0KSB7XG4gICAgbGV0IG9wdGlvbklucHV0VHlwZSA9IHtcbiAgICAgICAgc2VsZWN0ZWQ6IChtdWx0aXBsZVNlbGVjdCA/ICdjaGVja2JveCcgOiAncmFkaW8nKVxuICAgICAgfTtcbiAgICBsZXQgb3B0aW9uRGF0YU9yZGVyID0gW1xuICAgICAgJ3ZhbHVlJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAnc2VsZWN0ZWQnXG4gICAgXTtcbiAgICBsZXQgb3B0aW9uSW5wdXRzID0gW107XG4gICAgbGV0IG9wdGlvblRlbXBsYXRlID0ge3NlbGVjdGVkOiBmYWxzZSwgbGFiZWw6ICcnLCB2YWx1ZTogJyd9O1xuXG4gICAgb3B0aW9uRGF0YSA9IE9iamVjdC5hc3NpZ24ob3B0aW9uVGVtcGxhdGUsIG9wdGlvbkRhdGEpO1xuXG4gICAgZm9yIChsZXQgaSA9IG9wdGlvbkRhdGFPcmRlci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHByb3AgPSBvcHRpb25EYXRhT3JkZXJbaV07XG4gICAgICBpZiAob3B0aW9uRGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICBsZXQgYXR0cnMgPSB7XG4gICAgICAgICAgdHlwZTogb3B0aW9uSW5wdXRUeXBlW3Byb3BdIHx8ICd0ZXh0JyxcbiAgICAgICAgICBjbGFzc05hbWU6ICdvcHRpb24tJyArIHByb3AsXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbkRhdGFbcHJvcF0sXG4gICAgICAgICAgbmFtZTogbmFtZSArICctb3B0aW9uJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGF0dHJzLnBsYWNlaG9sZGVyID0gaTE4bltgcGxhY2Vob2xkZXIuJHtwcm9wfWBdIHx8ICcnO1xuXG4gICAgICAgIGlmIChwcm9wID09PSAnc2VsZWN0ZWQnICYmIG9wdGlvbkRhdGEuc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICBhdHRycy5jaGVja2VkID0gb3B0aW9uRGF0YS5zZWxlY3RlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbklucHV0cy5wdXNoKG0oJ2lucHV0JywgbnVsbCwgYXR0cnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVtb3ZlQXR0cnMgPSB7XG4gICAgICBjbGFzc05hbWU6ICdyZW1vdmUgYnRuJyxcbiAgICAgIHRpdGxlOiBpMThuLnJlbW92ZU1lc3NhZ2VcbiAgICB9O1xuICAgIG9wdGlvbklucHV0cy5wdXNoKHV0aWxzLm1hcmt1cCgnYScsIGkxOG4ucmVtb3ZlLCByZW1vdmVBdHRycykpO1xuXG4gICAgbGV0IGZpZWxkID0gdXRpbHMubWFya3VwKCdsaScsIG9wdGlvbklucHV0cyk7XG5cbiAgICByZXR1cm4gZmllbGQub3V0ZXJIVE1MO1xuICB9O1xuXG4gIGxldCBjbG9uZUl0ZW0gPSBmdW5jdGlvbiBjbG9uZUl0ZW0oY3VycmVudEl0ZW0pIHtcbiAgICBsZXQgY3VycmVudElkID0gY3VycmVudEl0ZW0uYXR0cignaWQnKTtcbiAgICBsZXQgdHlwZSA9IGN1cnJlbnRJdGVtLmF0dHIoJ3R5cGUnKTtcbiAgICBsZXQgdHMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBsZXQgY2xvbmVOYW1lID0gdHlwZSArICctJyArIHRzO1xuICAgIGxldCAkY2xvbmUgPSBjdXJyZW50SXRlbS5jbG9uZSgpO1xuXG4gICAgJGNsb25lLmZpbmQoJ1tpZF0nKS5lYWNoKChpLCBlbGVtKSA9PiB7XG4gICAgIGVsZW0uaWQgPSBlbGVtLmlkLnJlcGxhY2UoY3VycmVudElkLCBkYXRhLmxhc3RJRCk7XG4gICAgfSk7XG5cbiAgICAkY2xvbmUuZmluZCgnW2Zvcl0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZm9yJywgdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpLnJlcGxhY2UoY3VycmVudElkLCBkYXRhLmxhc3RJRCkpO1xuICAgIH0pO1xuXG4gICAgJGNsb25lLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAkKCdlOm5vdCguZm9ybS1lbGVtZW50cyknKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICBsZXQgbmV3TmFtZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gICAgICAgIG5ld05hbWUgPSBuZXdOYW1lLnN1YnN0cmluZygwLCAobmV3TmFtZS5sYXN0SW5kZXhPZignLScpICsgMSkpO1xuICAgICAgICBuZXdOYW1lID0gbmV3TmFtZSArIHRzLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCduYW1lJywgbmV3TmFtZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICRjbG9uZS5maW5kKCcuZm9ybS1lbGVtZW50cycpLmZpbmQoJzppbnB1dCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoJ25hbWUnKSA9PT0gJ25hbWUnKSB7XG4gICAgICAgIGxldCBuZXdWYWwgPSB0aGlzLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgICAgbmV3VmFsID0gbmV3VmFsLnN1YnN0cmluZygwLCAobmV3VmFsLmxhc3RJbmRleE9mKCctJykgKyAxKSk7XG4gICAgICAgIG5ld1ZhbCA9IG5ld1ZhbCArIHRzLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCd2YWx1ZScsIG5ld1ZhbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkY2xvbmUuYXR0cignaWQnLCBkYXRhLmxhc3RJRCk7XG4gICAgJGNsb25lLmF0dHIoJ25hbWUnLCBjbG9uZU5hbWUpO1xuICAgICRjbG9uZS5hZGRDbGFzcygnY2xvbmVkJyk7XG4gICAgJCgnLnNvcnRhYmxlLW9wdGlvbnMnLCAkY2xvbmUpLnNvcnRhYmxlKCk7XG5cbiAgICBpZiAob3B0cy50eXBlVXNlckV2ZW50c1t0eXBlXSAmJiBvcHRzLnR5cGVVc2VyRXZlbnRzW3R5cGVdLm9uY2xvbmUpIHtcbiAgICAgIG9wdHMudHlwZVVzZXJFdmVudHNbdHlwZV0ub25jbG9uZSgkY2xvbmVbMF0pO1xuICAgIH1cblxuICAgIGRhdGEubGFzdElEID0gaGVscGVycy5pbmNyZW1lbnRJZChkYXRhLmxhc3RJRCk7XG4gICAgcmV0dXJuICRjbG9uZTtcbiAgfTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVUSUxJVElFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbiAgLy8gZGVsZXRlIG9wdGlvbnNcbiAgJHN0YWdlLm9uKCdjbGljayB0b3VjaHN0YXJ0JywgJy5yZW1vdmUnLCBmdW5jdGlvbihlKSB7XG4gICAgbGV0ICRmaWVsZCA9ICQodGhpcykucGFyZW50cygnLmZvcm0tZmllbGQ6ZXEoMCknKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IG9wdGlvbnNDb3VudCA9ICQodGhpcykucGFyZW50cygnLnNvcnRhYmxlLW9wdGlvbnM6ZXEoMCknKS5jaGlsZHJlbignbGknKS5sZW5ndGg7XG4gICAgaWYgKG9wdGlvbnNDb3VudCA8PSAyKSB7XG4gICAgICBvcHRzLm5vdGlmeS5lcnJvcignRXJyb3I6ICcgKyBpMThuLm1pbk9wdGlvbk1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKHRoaXMpLnBhcmVudCgnbGknKS5zbGlkZVVwKCcyNTAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTtcbiAgICAgICAgaGVscGVycy51cGRhdGVQcmV2aWV3KCRmaWVsZCk7XG4gICAgICAgIGhlbHBlcnMuc2F2ZS5jYWxsKGhlbHBlcnMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyB0b3VjaCBmb2N1c1xuICAkc3RhZ2Uub24oJ3RvdWNoc3RhcnQnLCAnaW5wdXQnLCBmdW5jdGlvbihlKSB7XG4gICAgbGV0ICRpbnB1dCA9ICQodGhpcyk7XG4gICAgaWYgKGUuaGFuZGxlZCAhPT0gdHJ1ZSkge1xuICAgICAgaWYgKCRpbnB1dC5hdHRyKCd0eXBlJykgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgJGlucHV0LnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgbGV0IGZpZWxkVmFsID0gJGlucHV0LnZhbCgpO1xuICAgICAgICAkaW5wdXQudmFsKGZpZWxkVmFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gdG9nZ2xlIGZpZWxkc1xuICAkc3RhZ2Uub24oJ2NsaWNrIHRvdWNoc3RhcnQnLCAnLnRvZ2dsZS1mb3JtLCAuY2xvc2UtZmllbGQnLCBmdW5jdGlvbihlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGUuaGFuZGxlZCAhPT0gdHJ1ZSkge1xuICAgICAgbGV0IHRhcmdldElEID0gJChlLnRhcmdldCkucGFyZW50cygnLmZvcm0tZmllbGQ6ZXEoMCknKS5hdHRyKCdpZCcpO1xuICAgICAgaGVscGVycy50b2dnbGVFZGl0KHRhcmdldElEKTtcbiAgICAgIGUuaGFuZGxlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gICRzdGFnZS5vbignY2hhbmdlJywgJ1tuYW1lPVwic3VidHlwZVwiXScsIChlKSA9PiB7XG4gICAgY29uc3QgJGZpZWxkID0gJChlLnRhcmdldCkuY2xvc2VzdCgnbGkuZm9ybS1maWVsZCcpO1xuICAgIGNvbnN0ICR2YWxXcmFwID0gJCgnLnZhbHVlLXdyYXAnLCAkZmllbGQpO1xuICAgICR2YWxXcmFwLnRvZ2dsZShlLnRhcmdldC52YWx1ZSAhPT0gJ3F1aWxsJyk7XG4gIH0pO1xuXG5cbiAgJHN0YWdlLm9uKCdjaGFuZ2UnLCAnLnByZXYtaG9sZGVyIGlucHV0LCAucHJldi1ob2xkZXIgc2VsZWN0LCAucHJldi1ob2xkZXIgdGV4dGFyZWEnLCBlID0+IHtcbiAgICBsZXQgcHJldk9wdGlvbnM7XG4gICAgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnb3RoZXItb3B0aW9uJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGZpZWxkID0gdXRpbHMuY2xvc2VzdChlLnRhcmdldCwgJy5mb3JtLWZpZWxkJyk7XG4gICAgaWYgKHV0aWxzLmluQXJyYXkoZmllbGQudHlwZSwgWydzZWxlY3QnLCAnY2hlY2tib3gtZ3JvdXAnLCAncmFkaW8tZ3JvdXAnXSkpIHtcbiAgICAgIGxldCBvcHRpb25zID0gZmllbGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3B0aW9uLXZhbHVlJyk7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgdXRpbHMuZm9yRWFjaChvcHRpb25zLCBpID0+IHtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zW2ldLnBhcmVudEVsZW1lbnQuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbi5jaGVja2VkID0gZS50YXJnZXQudmFsdWUgPT09IG9wdGlvbnNbaV0udmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldk9wdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShlLnRhcmdldC5uYW1lKTtcbiAgICAgICAgdXRpbHMuZm9yRWFjaChwcmV2T3B0aW9ucywgaSA9PiB7XG4gICAgICAgICAgbGV0IHNlbGVjdGVkT3B0aW9uID0gb3B0aW9uc1tpXS5wYXJlbnRFbGVtZW50LmNoaWxkTm9kZXNbMF07XG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb24uY2hlY2tlZCA9IHByZXZPcHRpb25zW2ldLmNoZWNrZWQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZmllbGRWYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmFsdWUtJyArIGZpZWxkLmlkKTtcbiAgICAgIGlmKGZpZWxkVmFsKSB7XG4gICAgICAgIGZpZWxkVmFsLnZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGVscGVycy5zYXZlLmNhbGwoaGVscGVycyk7XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBwcmV2aWV3IHRvIGxhYmVsXG4gIHV0aWxzLmFkZEV2ZW50TGlzdGVuZXJzKGQuc3RhZ2UsICdrZXl1cCBjaGFuZ2UnLCBlID0+IHtcbiAgICBpZiAoIWUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZmxkLWxhYmVsJykpIHJldHVybjtcbiAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZSB8fCBlLnRhcmdldC5pbm5lckhUTUw7XG4gICAgbGV0IGxhYmVsID0gdXRpbHMuY2xvc2VzdChlLnRhcmdldCwgJy5mb3JtLWZpZWxkJykucXVlcnlTZWxlY3RvcignLmZpZWxkLWxhYmVsJyk7XG4gICAgbGFiZWwuaW5uZXJIVE1MID0gdXRpbHMucGFyc2VkSHRtbCh2YWx1ZSk7XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBlcnJvciBzdHlsaW5nIHdoZW4gdXNlcnMgdHJpZXMgdG8gY29ycmVjdCBtaXN0YWtlXG4gICRzdGFnZS5vbigna2V5dXAnLCAnaW5wdXQuZXJyb3InLCBmdW5jdGlvbihlKSB7XG4gICAgJChlLnRhcmdldCkucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBwcmV2aWV3IGZvciBkZXNjcmlwdGlvblxuICAkc3RhZ2Uub24oJ2tleXVwJywgJ2lucHV0W25hbWU9XCJkZXNjcmlwdGlvblwiXScsIGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgJGZpZWxkID0gJChlLnRhcmdldCkucGFyZW50cygnLmZvcm0tZmllbGQ6ZXEoMCknKTtcbiAgICBsZXQgY2xvc2VzdFRvb2xUaXAgPSAkKCcudG9vbHRpcC1lbGVtZW50JywgJGZpZWxkKTtcbiAgICBsZXQgdHRWYWwgPSAkKGUudGFyZ2V0KS52YWwoKTtcbiAgICBpZiAodHRWYWwgIT09ICcnKSB7XG4gICAgICBpZiAoIWNsb3Nlc3RUb29sVGlwLmxlbmd0aCkge1xuICAgICAgICBsZXQgdHQgPSBgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLWVsZW1lbnRcIiB0b29sdGlwPVwiJHt0dFZhbH1cIj4/PC9zcGFuPmA7XG4gICAgICAgICQoJy5maWVsZC1sYWJlbCcsICRmaWVsZCkuYWZ0ZXIodHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvc2VzdFRvb2xUaXAuYXR0cigndG9vbHRpcCcsIHR0VmFsKS5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjbG9zZXN0VG9vbFRpcC5sZW5ndGgpIHtcbiAgICAgICAgY2xvc2VzdFRvb2xUaXAuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgbXVsdGlwbGUgc2VsZWN0IG9wdGlvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBlIGNsaWNrIGV2ZW50XG4gICAqIEByZXR1cm4ge1N0cmluZ30gbmV3VHlwZVxuICAgKi9cbiAgJHN0YWdlLm9uKCdjaGFuZ2UnLCAnLmZsZC1tdWx0aXBsZScsIGUgPT4ge1xuICAgIGxldCBuZXdUeXBlID0gZS50YXJnZXQuY2hlY2tlZCA/ICdjaGVja2JveCcgOiAncmFkaW8nO1xuICAgIGxldCAkb3B0aW9ucyA9ICQoJy5vcHRpb24tc2VsZWN0ZWQnLCAkKGUudGFyZ2V0KS5jbG9zZXN0KCcuZm9ybS1lbGVtZW50cycpKTtcbiAgICAkb3B0aW9ucy5lYWNoKGkgPT4gJG9wdGlvbnNbaV0udHlwZSA9IG5ld1R5cGUpO1xuICAgIHJldHVybiBuZXdUeXBlO1xuICB9KTtcblxuICAvLyBmb3JtYXQgbmFtZSBhdHRyaWJ1dGVcbiAgJHN0YWdlLm9uKCdibHVyJywgJ2lucHV0LmZsZC1uYW1lJywgZnVuY3Rpb24oZSkge1xuICAgIGUudGFyZ2V0LnZhbHVlID0gdXRpbHMuc2FmZW5hbWUoZS50YXJnZXQudmFsdWUpO1xuICAgIGlmIChlLnRhcmdldC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICQoZS50YXJnZXQpXG4gICAgICAuYWRkQ2xhc3MoJ2ZpZWxkLWVycm9yJylcbiAgICAgIC5hdHRyKCdwbGFjZWhvbGRlcicsIGkxOG4uY2Fubm90QmVFbXB0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQoZS50YXJnZXQpLnJlbW92ZUNsYXNzKCdmaWVsZC1lcnJvcicpO1xuICAgIH1cbiAgfSk7XG5cbiAgJHN0YWdlLm9uKCdibHVyJywgJ2lucHV0LmZsZC1tYXhsZW5ndGgnLCBlID0+IHtcbiAgICBlLnRhcmdldC52YWx1ZSA9IHV0aWxzLmZvcmNlTnVtYmVyKGUudGFyZ2V0LnZhbHVlKTtcbiAgfSk7XG5cbiAgLy8gQ29weSBmaWVsZFxuICAkc3RhZ2Uub24oJ2NsaWNrIHRvdWNoc3RhcnQnLCAnLmljb24tY29weScsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IGN1cnJlbnRJdGVtID0gJChlLnRhcmdldCkucGFyZW50KCkucGFyZW50KCdsaScpO1xuICAgIGxldCAkY2xvbmUgPSBjbG9uZUl0ZW0oY3VycmVudEl0ZW0pO1xuICAgICRjbG9uZS5pbnNlcnRBZnRlcihjdXJyZW50SXRlbSk7XG4gICAgaGVscGVycy51cGRhdGVQcmV2aWV3KCRjbG9uZSk7XG4gICAgaGVscGVycy5zYXZlLmNhbGwoaGVscGVycyk7XG4gIH0pO1xuXG4gIC8vIERlbGV0ZSBmaWVsZFxuICAkc3RhZ2Uub24oJ2NsaWNrIHRvdWNoc3RhcnQnLCAnLmRlbGV0ZS1jb25maXJtJywgZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgYnV0dG9uUG9zaXRpb24gPSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICBwYWdlWDogYnV0dG9uUG9zaXRpb24ubGVmdCArIChidXR0b25Qb3NpdGlvbi53aWR0aCAvIDIpLFxuICAgICAgICBwYWdlWTogKGJ1dHRvblBvc2l0aW9uLnRvcCAtIGJvZHlSZWN0LnRvcCkgLSAxMlxuICAgICAgfTtcblxuICAgIGxldCBkZWxldGVJRCA9ICQoZS50YXJnZXQpLnBhcmVudHMoJy5mb3JtLWZpZWxkOmVxKDApJykuYXR0cignaWQnKTtcbiAgICBjb25zdCAkZmllbGQgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlbGV0ZUlEKSk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb2RhbENsb3NlZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgJGZpZWxkLnJlbW92ZUNsYXNzKCdkZWxldGluZycpO1xuICAgIH0sIGZhbHNlKTtcblxuICAgIC8vIENoZWNrIGlmIHVzZXIgaXMgc3VyZSB0aGV5IHdhbnQgdG8gcmVtb3ZlIHRoZSBmaWVsZFxuICAgIGlmIChvcHRzLmZpZWxkUmVtb3ZlV2Fybikge1xuICAgICAgbGV0IHdhcm5IMyA9IHV0aWxzLm1hcmt1cCgnaDMnLCBpMThuLndhcm5pbmcpO1xuICAgICAgbGV0IHdhcm5NZXNzYWdlID0gdXRpbHMubWFya3VwKCdwJywgaTE4bi5maWVsZFJlbW92ZVdhcm5pbmcpO1xuICAgICAgaGVscGVycy5jb25maXJtKFt3YXJuSDMsIHdhcm5NZXNzYWdlXSwgKCkgPT5cbiAgICAgICAgaGVscGVycy5yZW1vdmVGaWVsZChkZWxldGVJRCksIGNvb3Jkcyk7XG4gICAgICAkZmllbGQuYWRkQ2xhc3MoJ2RlbGV0aW5nJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlbHBlcnMucmVtb3ZlRmllbGQoZGVsZXRlSUQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVXBkYXRlIGJ1dHRvbiBzdHlsZSBzZWxlY3Rpb25cbiAgJHN0YWdlLm9uKCdjbGljaycsICcuc3R5bGUtd3JhcCBidXR0b24nLCBlID0+IHtcbiAgICBjb25zdCAkYnV0dG9uID0gJChlLnRhcmdldCk7XG4gICAgbGV0IHN0eWxlVmFsID0gJGJ1dHRvbi52YWwoKTtcbiAgICBsZXQgJGJ0blN0eWxlID0gJGJ1dHRvbi5wYXJlbnQoKS5wcmV2KCcuYnRuLXN0eWxlJyk7XG4gICAgJGJ0blN0eWxlLnZhbChzdHlsZVZhbCk7XG4gICAgJGJ1dHRvbi5zaWJsaW5ncygnLmJ0bicpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICRidXR0b24uYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgaGVscGVycy51cGRhdGVQcmV2aWV3KCRidG5TdHlsZS5jbG9zZXN0KCcuZm9ybS1maWVsZCcpKTtcbiAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcbiAgfSk7XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgdG8gdG9nZ2xlIHJlcXVpcmVkIGFzdGVyaXNrXG4gICRzdGFnZS5vbignY2xpY2snLCAnLmZsZC1yZXF1aXJlZCcsIGUgPT4ge1xuICAgICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5mb3JtLWZpZWxkJykuZmluZCgnLnJlcXVpcmVkLWFzdGVyaXNrJykudG9nZ2xlKCk7XG4gIH0pO1xuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIHRvIHRvZ2dsZSByb2xlcyB2aXNpYmlsaXR5XG4gICRzdGFnZS5vbignY2xpY2snLCAnaW5wdXQuZmxkLWFjY2VzcycsIGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgcm9sZXMgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCcuZm9ybS1maWVsZCcpLmZpbmQoJy5hdmFpbGFibGUtcm9sZXMnKTtcbiAgICBsZXQgZW5hYmxlUm9sZXNDQiA9ICQoZS50YXJnZXQpO1xuICAgIHJvbGVzLnNsaWRlVG9nZ2xlKDI1MCwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIWVuYWJsZVJvbGVzQ0IuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgJCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJywgcm9sZXMpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgdG8gYWRkIG5ldyBvcHRpb25zXG4gICRzdGFnZS5vbignY2xpY2snLCAnLmFkZC1vcHQnLCBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCAkb3B0aW9uV3JhcCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5maWVsZC1vcHRpb25zJyk7XG4gICAgbGV0ICRtdWx0aXBsZSA9ICQoJ1tuYW1lPVwibXVsdGlwbGVcIl0nLCAkb3B0aW9uV3JhcCk7XG4gICAgbGV0ICRmaXJzdE9wdGlvbiA9ICQoJy5vcHRpb24tc2VsZWN0ZWQ6ZXEoMCknLCAkb3B0aW9uV3JhcCk7XG4gICAgbGV0IGlzTXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIGlmICgkbXVsdGlwbGUubGVuZ3RoKSB7XG4gICAgICBpc011bHRpcGxlID0gJG11bHRpcGxlLnByb3AoJ2NoZWNrZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNNdWx0aXBsZSA9ICgkZmlyc3RPcHRpb24uYXR0cigndHlwZScpID09PSAnY2hlY2tib3gnKTtcbiAgICB9XG5cbiAgICBsZXQgbmFtZSA9ICRmaXJzdE9wdGlvbi5hdHRyKCduYW1lJyk7XG5cbiAgICAkKCcuc29ydGFibGUtb3B0aW9ucycsICRvcHRpb25XcmFwKS5hcHBlbmQoc2VsZWN0RmllbGRPcHRpb25zKG5hbWUsIGZhbHNlLCBpc011bHRpcGxlKSk7XG4gIH0pO1xuXG4gICRzdGFnZS5vbignbW91c2VvdmVyIG1vdXNlb3V0JywgJy5yZW1vdmUsIC5kZWwtYnV0dG9uJywgZSA9PlxuICAgICQoZS50YXJnZXQpLmNsb3Nlc3QoJ2xpJykudG9nZ2xlQ2xhc3MoJ2RlbGV0ZScpKTtcblxuICBsb2FkRmllbGRzKCk7XG5cbiAgJHN0YWdlLmNzcygnbWluLWhlaWdodCcsICRjYlVMLmhlaWdodCgpKTtcblxuICAvLyBJZiBvcHRpb24gc2V0LCBjb250cm9scyB3aWxsIHJlbWFpbiBpbiB2aWV3IGluIGVkaXRvclxuICBpZiAob3B0cy5zdGlja3lDb250cm9scy5lbmFibGUpIHtcbiAgICBoZWxwZXJzLnN0aWNreUNvbnRyb2xzKCRzdGFnZSk7XG4gIH1cblxuICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5sb2FkZWQpO1xuXG4gIC8vIE1ha2UgYWN0aW9ucyBhY2Nlc3NpYmxlXG4gIGZvcm1CdWlsZGVyLmFjdGlvbnMgPSB7XG4gICAgY2xlYXJGaWVsZHM6IGFuaW1hdGUgPT4gaGVscGVycy5yZW1vdmVBbGxGaWVsZHMoZC5zdGFnZSwgYW5pbWF0ZSksXG4gICAgc2hvd0RhdGE6IGhlbHBlcnMuc2hvd0RhdGEuYmluZChoZWxwZXJzKSxcbiAgICBzYXZlOiBoZWxwZXJzLnNhdmUuYmluZChoZWxwZXJzKSxcbiAgICBhZGRGaWVsZDogKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaGVscGVycy5zdG9wSW5kZXggPSBkYXRhLmZvcm1EYXRhLmxlbmd0aCA/IGluZGV4IDogdW5kZWZpbmVkO1xuICAgICAgcHJlcEZpZWxkVmFycyhmaWVsZCk7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5maWVsZEFkZGVkKTtcbiAgICB9LFxuICAgIHJlbW92ZUZpZWxkOiBoZWxwZXJzLnJlbW92ZUZpZWxkLmJpbmQoaGVscGVycyksXG4gICAgZ2V0RGF0YTogKHR5cGUgPSAnanMnKSA9PiB7XG4gICAgICBjb25zdCBzdGFnZSA9IGQuc3RhZ2U7XG4gICAgICBjb25zdCBoID0gaGVscGVycztcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIGpzOiAoKSA9PiBoLnByZXBEYXRhKHN0YWdlKSxcbiAgICAgICAgeG1sOiAoKSA9PiBoLnhtbFNhdmUoc3RhZ2UpLFxuICAgICAgICBqc29uOiAoKSA9PiB3aW5kb3cuSlNPTi5zdHJpbmdpZnkoaC5wcmVwRGF0YShzdGFnZSksIG51bGwsICdcXHQnKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGRhdGFbdHlwZV0oKTtcbiAgICB9LFxuICAgIHNldERhdGE6IGZvcm1EYXRhID0+IHtcbiAgICAgIGhlbHBlcnMucmVtb3ZlQWxsRmllbGRzKGQuc3RhZ2UsIGZhbHNlKTtcbiAgICAgIGxvYWRGaWVsZHMoZm9ybURhdGEpO1xuICAgIH0sXG4gICAgc2V0TGFuZzogYXN5bmMgbG9jYWxlID0+IHtcbiAgICAgIGF3YWl0IG1pMThuLnNldEN1cnJlbnQuY2FsbChtaTE4biwgbG9jYWxlKTtcbiAgICAgIGQuZW1wdHkoZWxlbWVudCk7XG4gICAgICBsZXQgZm9ybUJ1aWxkZXIgPSBuZXcgRm9ybUJ1aWxkZXIob3JpZ2luYWxPcHRzLCBlbGVtZW50KTtcbiAgICAgICQoZWxlbWVudCkuZGF0YSgnZm9ybUJ1aWxkZXInLCBmb3JtQnVpbGRlcik7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBmb3JtQnVpbGRlcjtcbn07XG5cblxuKGZ1bmN0aW9uKCAkICkge1xuICAkLmZuLmZvcm1CdWlsZGVyID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBsZXQgZWxlbXMgPSB0aGlzO1xuICAgIGxldCB7aTE4biwgLi4ub3B0c30gPSAkLmV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMsIHRydWUpO1xuICAgIGNvbmZpZy5vcHRzID0gb3B0cztcbiAgICBsZXQgaTE4bk9wdHMgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdEkxOG4sIGkxOG4sIHRydWUpO1xuICAgIGxldCBpbnN0YW5jZSA9IHtcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgZ2V0RGF0YTogbnVsbCxcbiAgICAgICAgc2V0RGF0YTogbnVsbCxcbiAgICAgICAgc2F2ZTogbnVsbCxcbiAgICAgICAgc2hvd0RhdGE6IG51bGwsXG4gICAgICAgIHNldExhbmc6IG51bGwsXG4gICAgICAgIGFkZEZpZWxkOiBudWxsLFxuICAgICAgICByZW1vdmVGaWVsZDogbnVsbCxcbiAgICAgICAgY2xlYXJGaWVsZHM6IG51bGxcbiAgICAgIH0sXG4gICAgICBnZXQgZm9ybURhdGEoKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5hY3Rpb25zLmdldERhdGEoJ2pzb24nKTtcbiAgICAgIH0sXG4gICAgICBwcm9taXNlOiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgbWkxOG4uaW5pdChpMThuT3B0cykudGhlbigoKSA9PiB7XG4gICAgICAgICAgZWxlbXMuZWFjaChpID0+IHtcbiAgICAgICAgICAgIGxldCBmb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcihvcHRzLCBlbGVtc1tpXSk7XG4gICAgICAgICAgICAkKGVsZW1zW2ldKS5kYXRhKCdmb3JtQnVpbGRlcicsIGZvcm1CdWlsZGVyKTtcbiAgICAgICAgICAgIGluc3RhbmNlLmFjdGlvbnMgPSBmb3JtQnVpbGRlci5hY3Rpb25zO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRlbGV0ZSBpbnN0YW5jZS5wcm9taXNlO1xuICAgICAgICAgIHJlc29sdmUoaW5zdGFuY2UpO1xuICAgICAgICB9KS5jYXRjaChyZWplY3QpO1xuICAgICAgfSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufSkoIGpRdWVyeSApO1xuIiwiaW1wb3J0IHtpbnN0YW5jZURvbSwgZGVmYXVsdFN1YnR5cGVzLCBlbXB0eSwgb3B0aW9uRmllbGRzUmVnRXh9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7aW5zdGFuY2VEYXRhfSBmcm9tICcuL2RhdGEnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgbWkxOG4gZnJvbSAnbWkxOG4nO1xuaW1wb3J0IHtjb25maWd9IGZyb20gJy4vY29uZmlnJztcblxuY29uc3Qgb3B0cyA9IGNvbmZpZy5vcHRzO1xuY29uc3QgbSA9IHV0aWxzLm1hcmt1cDtcblxuLyoqXG4gKiBVdGlsaXRpZXMgc3BlY2lmaWMgdG8gZm9ybS1idWlsZGVyLmpzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlbHBlcnMge1xuICAvKipcbiAgICogU2V0dXAgZGVmYXVsdHMsIGdldCBpbnN0YW5jZSBkYXRhIGFuZCBkb21cbiAgICogQHBhcmFtICB7U3RyaW5nfSBmb3JtSUQgW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgY29uc3RydWN0b3IoZm9ybUlEKSB7XG4gICAgdGhpcy5kYXRhID0gaW5zdGFuY2VEYXRhW2Zvcm1JRF07XG4gICAgdGhpcy5kID0gaW5zdGFuY2VEb21bZm9ybUlEXTtcbiAgICB0aGlzLmRvQ2FuY2VsID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHdoZW4gYSBkcmFnIGJlZ2luc1xuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGV2ZW50XG4gICAqIEBwYXJhbSAge09iamVjdH0gdWlcbiAgICovXG4gIHN0YXJ0TW92aW5nKGV2ZW50LCB1aSkge1xuICAgIHVpLml0ZW0uc2hvdygpLmFkZENsYXNzKCdtb3ZpbmcnKTtcbiAgICB0aGlzLmRvQ2FuY2VsID0gdHJ1ZTtcbiAgICB0aGlzLmZyb20gPSB1aS5pdGVtLnBhcmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB3aGVuIGEgZHJhZyBlbmRzXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSB1aVxuICAgKi9cbiAgc3RvcE1vdmluZyhldmVudCwgdWkpIHtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgIHVpLml0ZW0ucmVtb3ZlQ2xhc3MoJ21vdmluZycpO1xuICAgIGlmIChfdGhpcy5kb0NhbmNlbCkge1xuICAgICAgaWYgKHVpLnNlbmRlcikge1xuICAgICAgICAkKHVpLnNlbmRlcikuc29ydGFibGUoJ2NhbmNlbCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5mcm9tLnNvcnRhYmxlKCdjYW5jZWwnKTtcbiAgICB9XG4gICAgX3RoaXMuc2F2ZSgpO1xuICAgIF90aGlzLmRvQ2FuY2VsID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogalF1ZXJ5IFVJIHNvcnRhYmxlIGJlZm9yZVN0b3AgY2FsbGJhY2sgdXNlZCBmb3IgYm90aCBsaXN0cy5cbiAgICogTG9naWMgZm9yIGNhbmNlbGluZyB0aGUgc29ydCBvciBkcm9wLlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGV2ZW50XG4gICAqIEBwYXJhbSAge09iamVjdH0gdWlcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIGJlZm9yZVN0b3AoZXZlbnQsIHVpKSB7XG4gICAgbGV0IF90aGlzID0gdGhpcztcbiAgICBjb25zdCBvcHRzID0gY29uZmlnLm9wdHM7XG4gICAgY29uc3QgZm9ybSA9IF90aGlzLmQuc3RhZ2U7XG4gICAgbGV0IGxhc3RJbmRleCA9IGZvcm0uY2hpbGROb2Rlcy5sZW5ndGggLSAxO1xuICAgIGxldCBjYW5jZWxBcnJheSA9IFtdO1xuICAgIF90aGlzLnN0b3BJbmRleCA9IHVpLnBsYWNlaG9sZGVyLmluZGV4KCkgLSAxO1xuXG4gICAgaWYgKCFvcHRzLnNvcnRhYmxlQ29udHJvbHMgJiYgdWkuaXRlbS5wYXJlbnQoKS5oYXNDbGFzcygnZnJtYi1jb250cm9sJykpIHtcbiAgICAgIGNhbmNlbEFycmF5LnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMucHJlcGVuZCkge1xuICAgICAgY2FuY2VsQXJyYXkucHVzaChfdGhpcy5zdG9wSW5kZXggPT09IDApO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmFwcGVuZCkge1xuICAgICAgY2FuY2VsQXJyYXkucHVzaCgoX3RoaXMuc3RvcEluZGV4ICsgMSkgPT09IGxhc3RJbmRleCk7XG4gICAgfVxuXG4gICAgX3RoaXMuZG9DYW5jZWwgPSBjYW5jZWxBcnJheS5zb21lKGVsZW0gPT4gZWxlbSA9PT0gdHJ1ZSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byBnZXQgZWxlbWVudCB0eXBlIGFuZCBzdWJ0eXBlXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gJGZpZWxkXG4gICAqIEByZXR1cm4ge09iamVjdH0ge3R5cGU6ICdmaWVsZFR5cGUnLCBzdWJ0eXBlOiAnZmllbGRTdWJUeXBlJ31cbiAgICovXG4gIGdldFR5cGVzKCRmaWVsZCkge1xuICAgIGxldCB0eXBlcyA9IHtcbiAgICAgICAgdHlwZTogJGZpZWxkLmF0dHIoJ3R5cGUnKVxuICAgICAgfTtcbiAgICBsZXQgc3VidHlwZSA9ICQoJy5mbGQtc3VidHlwZScsICRmaWVsZCkudmFsKCk7XG5cbiAgICBpZiAoc3VidHlwZSAhPT0gdHlwZXMudHlwZSkge1xuICAgICAgdHlwZXMuc3VidHlwZSA9IHN1YnR5cGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvcHRpb24gZGF0YSBmb3IgYSBmaWVsZFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGZpZWxkIGpRdWVyeSBmaWVsZCBvYmplY3RcbiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICBBcnJheSBvZiBvcHRpb24gdmFsdWVzXG4gICAqL1xuICBmaWVsZE9wdGlvbkRhdGEoZmllbGQpIHtcbiAgICBsZXQgb3B0aW9ucyA9IFtdO1xuXG4gICAgJCgnLnNvcnRhYmxlLW9wdGlvbnMgbGknLCBmaWVsZCkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIGxldCAkb3B0aW9uID0gJCh0aGlzKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gJCgnLm9wdGlvbi1zZWxlY3RlZCcsICRvcHRpb24pLmlzKCc6Y2hlY2tlZCcpO1xuICAgICAgbGV0IGF0dHJzID0ge1xuICAgICAgICAgIGxhYmVsOiAkKCcub3B0aW9uLWxhYmVsJywgJG9wdGlvbikudmFsKCksXG4gICAgICAgICAgdmFsdWU6ICQoJy5vcHRpb24tdmFsdWUnLCAkb3B0aW9uKS52YWwoKVxuICAgICAgICB9O1xuXG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgYXR0cnMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgb3B0aW9ucy5wdXNoKGF0dHJzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFhNTCBzYXZlXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gZm9ybSBzb3J0YWJsZUZpZWxkcyBub2RlXG4gICAqIEByZXR1cm4ge1N0cmluZ30geG1sIGluIHN0cmluZ1xuICAgKi9cbiAgeG1sU2F2ZShmb3JtKSB7XG4gICAgbGV0IGZvcm1EYXRhID0gdGhpcy5wcmVwRGF0YShmb3JtKTtcbiAgICBsZXQgeG1sID0gWyc8Zm9ybS10ZW1wbGF0ZT5cXG5cXHQ8ZmllbGRzPiddO1xuXG4gICAgdXRpbHMuZm9yRWFjaChmb3JtRGF0YSwgZnVuY3Rpb24oZmllbGRJbmRleCwgZmllbGQpIHtcbiAgICAgIGxldCBmaWVsZENvbnRlbnQgPSBudWxsO1xuICAgICAgY29uc3Qgb3B0aW9uRmllbGRzID0gb3B0aW9uRmllbGRzUmVnRXg7XG5cbiAgICAgIC8vIEhhbmRsZSBvcHRpb25zXG4gICAgICBpZiAoZmllbGQudHlwZS5tYXRjaChvcHRpb25GaWVsZHMpKSB7XG4gICAgICAgIGxldCBvcHRpb25EYXRhID0gZmllbGQudmFsdWVzO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9uRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBvcHRpb24gPSBtKCdvcHRpb24nLCBvcHRpb25EYXRhW2ldLmxhYmVsLCBvcHRpb25EYXRhW2ldKS5vdXRlckhUTUw7XG4gICAgICAgICAgb3B0aW9ucy5wdXNoKCdcXG5cXHRcXHRcXHQnICsgb3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnB1c2goJ1xcblxcdFxcdCcpO1xuXG4gICAgICAgIGZpZWxkQ29udGVudCA9IG9wdGlvbnMuam9pbignJyk7XG4gICAgICAgIGRlbGV0ZSBmaWVsZC52YWx1ZXM7XG4gICAgICB9XG5cbiAgICAgIGxldCB4bWxGaWVsZCA9IG0oJ2ZpZWxkJywgZmllbGRDb250ZW50LCBmaWVsZCk7XG4gICAgICB4bWwucHVzaCgnXFxuXFx0XFx0JyArIHhtbEZpZWxkLm91dGVySFRNTCk7XG4gICAgfSk7XG5cbiAgICB4bWwucHVzaCgnXFxuXFx0PC9maWVsZHM+XFxuPC9mb3JtLXRlbXBsYXRlPicpO1xuXG4gICAgcmV0dXJuIHhtbC5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZm9ybURhdGEgZnJvbSBlZGl0b3IgaW4gSlMgT2JqZWN0IGZvcm1hdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGZvcm0gYWthIHN0YWdlLCBET00gZWxlbWVudFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGZvcm1EYXRhXG4gICAqL1xuICBwcmVwRGF0YShmb3JtKSB7XG4gICAgbGV0IGZvcm1EYXRhID0gW107XG4gICAgbGV0IGQgPSB0aGlzLmQ7XG4gICAgbGV0IF90aGlzID0gdGhpcztcblxuICAgIGlmIChmb3JtLmNoaWxkTm9kZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAvLyBidWlsZCBkYXRhIG9iamVjdFxuICAgICAgdXRpbHMuZm9yRWFjaChmb3JtLmNoaWxkTm9kZXMsIGFzeW5jIGZ1bmN0aW9uKGluZGV4LCBmaWVsZCkge1xuICAgICAgICBsZXQgJGZpZWxkID0gJChmaWVsZCk7XG5cbiAgICAgICAgaWYgKCEoJGZpZWxkLmhhc0NsYXNzKCdkaXNhYmxlZC1maWVsZCcpKSkge1xuICAgICAgICAgIGxldCBmaWVsZERhdGEgPSBfdGhpcy5nZXRUeXBlcygkZmllbGQpO1xuICAgICAgICAgIGxldCByb2xlVmFscyA9ICQoJy5yb2xlcy1maWVsZDpjaGVja2VkJywgZmllbGQpLm1hcChlbGVtID0+IGVsZW0udmFsdWUpLmdldCgpO1xuXG4gICAgICAgICAgX3RoaXMuc2V0QXR0clZhbHMoZmllbGQsIGZpZWxkRGF0YSk7XG5cbiAgICAgICAgICBpZiAoZmllbGREYXRhLnN1YnR5cGUpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZERhdGEuc3VidHlwZSA9PT0gJ3F1aWxsJykge1xuICAgICAgICAgICAgICBsZXQgaWQgPSBgJHtmaWVsZERhdGEubmFtZX0tcHJldmlld2A7XG4gICAgICAgICAgICAgIGlmICh3aW5kb3cuZmJFZGl0b3JzLnF1aWxsW2lkXSkge1xuICAgICAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHdpbmRvdy5mYkVkaXRvcnMucXVpbGxbaWRdLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBpbnN0YW5jZS5nZXRDb250ZW50cygpO1xuICAgICAgICAgICAgICAgIGZpZWxkRGF0YS52YWx1ZSA9IHdpbmRvdy5KU09OLnN0cmluZ2lmeShkYXRhLm9wcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZihmaWVsZERhdGEuc3VidHlwZSA9PT0gJ3RpbnltY2UnICYmIHdpbmRvdy50aW55bWNlKSB7XG4gICAgICAgICAgICAgIGxldCBpZCA9IGAke2ZpZWxkRGF0YS5uYW1lfS1wcmV2aWV3YDtcbiAgICAgICAgICAgICAgaWYgKHdpbmRvdy50aW55bWNlLmVkaXRvcnNbaWRdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVkaXRvciA9IHdpbmRvdy50aW55bWNlLmVkaXRvcnNbaWRdO1xuICAgICAgICAgICAgICAgIGZpZWxkRGF0YS52YWx1ZSA9IGVkaXRvci5nZXRDb250ZW50KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocm9sZVZhbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmaWVsZERhdGEucm9sZSA9IHJvbGVWYWxzLmpvaW4oJywnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWVsZERhdGEuY2xhc3NOYW1lID0gZmllbGREYXRhLmNsYXNzTmFtZSB8fCBmaWVsZERhdGEuY2xhc3M7XG5cbiAgICAgICAgICBsZXQgbWF0Y2ggPSAvKD86XnxcXHMpYnRuLSguKj8pKD86XFxzfCQpL2cuZXhlYyhmaWVsZERhdGEuY2xhc3NOYW1lKTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGZpZWxkRGF0YS5zdHlsZSA9IG1hdGNoWzFdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkRGF0YSA9IHV0aWxzLnRyaW1PYmooZmllbGREYXRhKTtcblxuICAgICAgICAgIGxldCBtdWx0aXBsZUZpZWxkID0gZmllbGREYXRhLnR5cGUubWF0Y2goZC5vcHRpb25GaWVsZHNSZWdFeCk7XG5cbiAgICAgICAgICBpZiAobXVsdGlwbGVGaWVsZCkge1xuICAgICAgICAgICAgZmllbGREYXRhLnZhbHVlcyA9IF90aGlzLmZpZWxkT3B0aW9uRGF0YSgkZmllbGQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvcm1EYXRhLnB1c2goZmllbGREYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbmQgc2V0IHRoZSBkYXRhIGZvciBhbiBlZGl0b3IuIE1haW5seVxuICAgKiBhIHdyYXBwZXIgZm9yIGhhbmRsaW5nIGRhdGFUeXBlIG9wdGlvblxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGZvcm1EYXRhXG4gICAqIEByZXR1cm4ge09iamVjdH0gZm9ybURhdGFcbiAgICovXG4gIGdldERhdGEoZm9ybURhdGEpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBpZiAoIWZvcm1EYXRhKSB7XG4gICAgICBmb3JtRGF0YSA9IGNvbmZpZy5vcHRzLmZvcm1EYXRhO1xuICAgIH1cblxuICAgIGlmICghZm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgc2V0RGF0YSA9IHtcbiAgICAgIHhtbDogZm9ybURhdGEgPT4gdXRpbHMucGFyc2VYTUwoZm9ybURhdGEpLFxuICAgICAganNvbjogZm9ybURhdGEgPT4gd2luZG93LkpTT04ucGFyc2UoZm9ybURhdGEpXG4gICAgfTtcblxuICAgIGRhdGEuZm9ybURhdGEgPSBzZXREYXRhW2NvbmZpZy5vcHRzLmRhdGFUeXBlXShmb3JtRGF0YSkgfHwgW107XG5cbiAgICByZXR1cm4gZGF0YS5mb3JtRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhbmQgcmV0dXJucyBmb3JtRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhZ2UgRE9NIGVsZW1lbnRcbiAgICogQHJldHVybiB7WE1MfEpTT059IGZvcm1EYXRhXG4gICAqL1xuICBzYXZlKHN0YWdlKSB7XG4gICAgbGV0IF90aGlzID0gdGhpcztcbiAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBpZighc3RhZ2UpIHtcbiAgICAgIHN0YWdlID0gdGhpcy5kLnN0YWdlO1xuICAgIH1cbiAgICBsZXQgZG9TYXZlID0ge1xuICAgICAgeG1sOiAoKSA9PiBfdGhpcy54bWxTYXZlKHN0YWdlKSxcbiAgICAgIGpzb246ICgpID0+XG4gICAgICB3aW5kb3cuSlNPTi5zdHJpbmdpZnkoX3RoaXMucHJlcERhdGEoc3RhZ2UpLCBudWxsLCAnXFx0JylcbiAgICB9O1xuXG4gICAgLy8gc2F2ZSBhY3Rpb24gZm9yIGN1cnJlbnQgYGRhdGFUeXBlYFxuICAgIGRhdGEuZm9ybURhdGEgPSBkb1NhdmVbY29uZmlnLm9wdHMuZGF0YVR5cGVdKHN0YWdlKTtcblxuICAgIC8vIHRyaWdnZXIgZm9ybVNhdmVkIGV2ZW50XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudHMuZm9ybVNhdmVkKTtcbiAgICByZXR1cm4gZGF0YS5mb3JtRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbmNyZW1lbnRzIHRoZSBmaWVsZCBpZHMgd2l0aCBzdXBwb3J0IGZvciBtdWx0aXBsZSBlZGl0b3JzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gaWQgZmllbGQgSURcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICBpbmNyZW1lbnRlZCBmaWVsZCBJRFxuICAgKi9cbiAgaW5jcmVtZW50SWQoaWQpIHtcbiAgICBsZXQgc3BsaXQgPSBpZC5sYXN0SW5kZXhPZignLScpO1xuICAgIGxldCBuZXdGaWVsZE51bWJlciA9IHBhcnNlSW50KGlkLnN1YnN0cmluZyhzcGxpdCArIDEpKSArIDE7XG4gICAgbGV0IGJhc2VTdHJpbmcgPSBpZC5zdWJzdHJpbmcoMCwgc3BsaXQpO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VTdHJpbmd9LSR7bmV3RmllbGROdW1iZXJ9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlcyBmb3IgZmllbGQgYXR0cmlidXRlcyBpbiB0aGUgZWRpdG9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZFxuICAgKiBAcGFyYW0ge09iamVjdH0gZmllbGREYXRhXG4gICAqL1xuICBzZXRBdHRyVmFscyhmaWVsZCwgZmllbGREYXRhKSB7XG4gICAgbGV0IGF0dHJzID0gZmllbGQucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cImZsZC1cIl0nKTtcbiAgICBhdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgbGV0IHZhbHVlO1xuICAgICAgbGV0IG5hbWUgPSB1dGlscy5jYW1lbENhc2UoYXR0ci5nZXRBdHRyaWJ1dGUoJ25hbWUnKSk7XG4gICAgICBpZiAoYXR0ci5hdHRyaWJ1dGVzWydjb250ZW50ZWRpdGFibGUnXSkge1xuICAgICAgICB2YWx1ZSA9IGF0dHIuaW5uZXJIVE1MO1xuICAgICAgfSBlbHNlIGlmIChhdHRyLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgdmFsdWUgPSBhdHRyLmNoZWNrZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGF0dHIudmFsdWU7XG4gICAgICB9XG4gICAgICBmaWVsZERhdGFbbmFtZV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0IGZpZWxkIGF0dHJpYnV0ZSB2YWx1ZXMgYW5kIGNhbGwgZmllbGRQcmV2aWV3IHRvIGdlbmVyYXRlIHByZXZpZXdcbiAgICogQHBhcmFtICB7T2JqZWN0fSAkZmllbGQgalF1ZXJ5IERPTSBlbGVtZW50XG4gICAqL1xuICB1cGRhdGVQcmV2aWV3KCRmaWVsZCkge1xuICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgbGV0IGQgPSB0aGlzLmQ7XG4gICAgY29uc3QgZmllbGRDbGFzcyA9ICRmaWVsZC5hdHRyKCdjbGFzcycpO1xuICAgIGxldCBmaWVsZCA9ICRmaWVsZFswXTtcbiAgICBpZiAoZmllbGRDbGFzcy5pbmRleE9mKCdpbnB1dC1jb250cm9sJykgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpZWxkVHlwZSA9ICRmaWVsZC5hdHRyKCd0eXBlJyk7XG4gICAgbGV0ICRwcmV2SG9sZGVyID0gJCgnLnByZXYtaG9sZGVyJywgZmllbGQpO1xuICAgIGxldCBwcmV2aWV3RGF0YSA9IHtcbiAgICAgIHR5cGU6IGZpZWxkVHlwZVxuICAgIH07XG4gICAgbGV0IHByZXZpZXc7XG5cbiAgICBfdGhpcy5zZXRBdHRyVmFscyhmaWVsZCwgcHJldmlld0RhdGEpO1xuXG4gICAgbGV0IHN0eWxlID0gJCgnLmJ0bi1zdHlsZScsIGZpZWxkKS52YWwoKTtcbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHByZXZpZXdEYXRhLnN0eWxlID0gc3R5bGU7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkVHlwZS5tYXRjaChkLm9wdGlvbkZpZWxkc1JlZ0V4KSkge1xuICAgICAgcHJldmlld0RhdGEudmFsdWVzID0gW107XG4gICAgICBwcmV2aWV3RGF0YS5tdWx0aXBsZSA9ICQoJ1tuYW1lPVwibXVsdGlwbGVcIl0nLCBmaWVsZCkuaXMoJzpjaGVja2VkJyk7XG5cbiAgICAgICQoJy5zb3J0YWJsZS1vcHRpb25zIGxpJywgZmllbGQpLmVhY2goZnVuY3Rpb24oaSwgJG9wdGlvbikge1xuICAgICAgICBsZXQgb3B0aW9uID0ge307XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9ICQoJy5vcHRpb24tc2VsZWN0ZWQnLCAkb3B0aW9uKS5pcygnOmNoZWNrZWQnKTtcbiAgICAgICAgb3B0aW9uLnZhbHVlID0gJCgnLm9wdGlvbi12YWx1ZScsICRvcHRpb24pLnZhbCgpO1xuICAgICAgICBvcHRpb24ubGFiZWwgPSAkKCcub3B0aW9uLWxhYmVsJywgJG9wdGlvbikudmFsKCk7XG4gICAgICAgIHByZXZpZXdEYXRhLnZhbHVlcy5wdXNoKG9wdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwcmV2aWV3RGF0YSA9IHV0aWxzLnRyaW1PYmoocHJldmlld0RhdGEpO1xuXG4gICAgcHJldmlld0RhdGEuY2xhc3NOYW1lID0gX3RoaXMuY2xhc3NOYW1lcyhmaWVsZCwgcHJldmlld0RhdGEpO1xuICAgICQoJy5mbGQtY2xhc3NOYW1lJywgZmllbGQpLnZhbChwcmV2aWV3RGF0YS5jbGFzc05hbWUpO1xuXG4gICAgJGZpZWxkLmRhdGEoJ2ZpZWxkRGF0YScsIHByZXZpZXdEYXRhKTtcbiAgICBwcmV2aWV3ID0gdXRpbHMuZ2V0VGVtcGxhdGUocHJldmlld0RhdGEsIHRydWUpO1xuXG4gICAgZW1wdHkoJHByZXZIb2xkZXJbMF0pO1xuICAgICRwcmV2SG9sZGVyWzBdLmFwcGVuZENoaWxkKHByZXZpZXcpO1xuICAgIHByZXZpZXcuZGlzcGF0Y2hFdmVudChldmVudHMuZmllbGRSZW5kZXJlZCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhIGN1c3RvbSB0b29sdGlwIGZvciBkaXNhYmxlZCBmaWVsZHMuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gZmllbGRcbiAgICovXG4gIGRpc2FibGVkVFQoc3RhZ2UpIHtcbiAgICBjb25zdCBtb3ZlID0gKGUsIGVsZW0pID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkT2Zmc2V0ID0gZWxlbS5maWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHggPSBlLmNsaWVudFggLSBmaWVsZE9mZnNldC5sZWZ0IC0gMjE7XG4gICAgICBjb25zdCB5ID0gZS5jbGllbnRZIC0gZmllbGRPZmZzZXQudG9wIC0gZWxlbS50dC5vZmZzZXRIZWlnaHQgLSAxMjtcbiAgICAgIGVsZW0udHQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuICAgIH07XG5cbiAgICBzdGFnZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGlzYWJsZWQtZmllbGQnKS5mb3JFYWNoKFxuICAgICAgZmllbGQgPT4ge1xuICAgICAgICBsZXQgdGl0bGUgPSBvcHRzLm1lc3NhZ2VzLmZpZWxkTm9uRWRpdGFibGU7XG5cbiAgICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgICAgbGV0IHR0ID0gdXRpbHMubWFya3VwKCdwJywgdGl0bGUsIHtjbGFzc05hbWU6ICdmcm1iLXR0J30pO1xuICAgICAgICAgIGZpZWxkLmFwcGVuZENoaWxkKHR0KTtcbiAgICAgICAgICBmaWVsZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBlID0+IG1vdmUoZSwge3R0LCBmaWVsZH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBjbGFzc05hbWVzIGZvciBmaWVsZFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGZpZWxkXG4gICAqIEBwYXJhbSAge09iamVjdH0gcHJldmlld0RhdGFcbiAgICogQHJldHVybiB7U3RyaW5nfSBjbGFzc05hbWVzXG4gICAqL1xuICBjbGFzc05hbWVzKGZpZWxkLCBwcmV2aWV3RGF0YSkge1xuICAgIGxldCBjbGFzc05hbWUgPSBmaWVsZC5xdWVyeVNlbGVjdG9yKCcuZmxkLWNsYXNzTmFtZScpO1xuICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBpO1xuICAgIGxldCB0eXBlID0gcHJldmlld0RhdGEudHlwZTtcbiAgICBsZXQgc3R5bGUgPSBwcmV2aWV3RGF0YS5zdHlsZTtcbiAgICBsZXQgY2xhc3NlcyA9IGNsYXNzTmFtZS52YWx1ZS5zcGxpdCgnICcpO1xuICAgIGxldCB0eXBlcyA9IHtcbiAgICAgIGJ1dHRvbjogJ2J0bicsXG4gICAgICBzdWJtaXQ6ICdidG4nXG4gICAgfTtcblxuICAgIGxldCBwcmltYXJ5VHlwZSA9IHR5cGVzW3R5cGVdO1xuXG4gICAgaWYgKHByaW1hcnlUeXBlKSB7XG4gICAgICBpZiAoc3R5bGUpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsZXQgcmUgPSBuZXcgUmVnRXhwKGAoPzpefFxccykke3ByaW1hcnlUeXBlfS0oLio/KSg/Olxcc3wkKStgLCAnZycpO1xuICAgICAgICAgIGxldCBtYXRjaCA9IGNsYXNzZXNbaV0ubWF0Y2gocmUpO1xuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY2xhc3Nlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNsYXNzZXMucHVzaChwcmltYXJ5VHlwZSArICctJyArIHN0eWxlKTtcbiAgICAgIH1cbiAgICAgIGNsYXNzZXMucHVzaChwcmltYXJ5VHlwZSk7XG4gICAgfVxuXG4gICAgLy8gcmV2ZXJzZSB0aGUgYXJyYXkgdG8gcHV0IGN1c3RvbSBjbGFzc2VzIGF0IGVuZCxcbiAgICAvLyByZW1vdmUgYW55IGR1cGxpY2F0ZXMsIGNvbnZlcnQgdG8gc3RyaW5nLCByZW1vdmUgd2hpdGVzcGFjZVxuICAgIHJldHVybiB1dGlscy51bmlxdWUoY2xhc3Nlcykuam9pbignICcpLnRyaW0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYW5kIG9wZW4gZGlhbG9nXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gb3ZlcmxheSBFeGlzdGluZyBvdmVybGF5IGlmIHRoZXJlIGlzIG9uZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGRpYWxvZyAgRXhpc3RpbmcgZGlhbG9nXG4gICAqL1xuICBjbG9zZUNvbmZpcm0ob3ZlcmxheSwgZGlhbG9nKSB7XG4gICAgaWYgKCFvdmVybGF5KSB7XG4gICAgICBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9ybS1idWlsZGVyLW92ZXJsYXknKVswXTtcbiAgICB9XG4gICAgaWYgKCFkaWFsb2cpIHtcbiAgICAgIGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Zvcm0tYnVpbGRlci1kaWFsb2cnKVswXTtcbiAgICB9XG4gICAgb3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7XG4gICAgZGlhbG9nLnJlbW92ZSgpO1xuICAgIG92ZXJsYXkucmVtb3ZlKCk7XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudHMubW9kYWxDbG9zZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxheW91dCBkYXRhIGJhc2VkIG9uIGNvbnRyb2xQb3NpdGlvbiBvcHRpb25cbiAgICogQHBhcmFtICB7U3RyaW5nfSBjb250cm9sUG9zaXRpb24gJ2xlZnQnIG9yICdyaWdodCdcbiAgICogQHJldHVybiB7T2JqZWN0fSBsYXlvdXQgb2JqZWN0XG4gICAqL1xuICBlZGl0b3JMYXlvdXQoY29udHJvbFBvc2l0aW9uKSB7XG4gICAgbGV0IGxheW91dE1hcCA9IHtcbiAgICAgIGxlZnQ6IHtcbiAgICAgICAgc3RhZ2U6ICdwdWxsLXJpZ2h0JyxcbiAgICAgICAgY29udHJvbHM6ICdwdWxsLWxlZnQnXG4gICAgICB9LFxuICAgICAgcmlnaHQ6IHtcbiAgICAgICAgc3RhZ2U6ICdwdWxsLWxlZnQnLFxuICAgICAgICBjb250cm9sczogJ3B1bGwtcmlnaHQnXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBsYXlvdXRNYXBbY29udHJvbFBvc2l0aW9uXSA/IGxheW91dE1hcFtjb250cm9sUG9zaXRpb25dIDogJyc7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvdmVybGF5IHRvIHRoZSBwYWdlLiBVc2VkIGZvciBtb2RhbHMuXG4gICAqIEByZXR1cm4ge09iamVjdH0gRE9NIE9iamVjdFxuICAgKi9cbiAgc2hvd092ZXJsYXkoKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGxldCBvdmVybGF5ID0gdXRpbHMubWFya3VwKCdkaXYnLCBudWxsLCB7XG4gICAgICBjbGFzc05hbWU6ICdmb3JtLWJ1aWxkZXItb3ZlcmxheSdcbiAgICB9KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICAgIG92ZXJsYXkuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpO1xuXG4gICAgb3ZlcmxheS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBfdGhpcy5jbG9zZUNvbmZpcm0ob3ZlcmxheSk7XG4gICAgfTtcblxuICAgIHJldHVybiBvdmVybGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBjb25maXJtYXRpb24gZGlhbG9nXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gIG1lc3NhZ2UgICBDb250ZW50IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZGlhbG9nXG4gICAqIEBwYXJhbSAge0Z1bmN9ICB5ZXNBY3Rpb24gY2FsbGJhY2sgdG8gZmlyZSBpZiB0aGV5IGNvbmZpcm1cbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gY29vcmRzICAgIGxvY2F0aW9uIHRvIHB1dCB0aGUgZGlhbG9nXG4gICAqIEBwYXJhbSAge1N0cmluZ30gIGNsYXNzTmFtZSBDdXN0b20gY2xhc3MgdG8gYmUgYWRkZWQgdG8gdGhlIGRpYWxvZ1xuICAgKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgICAgUmVmZXJlbmNlIHRvIHRoZSBtb2RhbFxuICAgKi9cbiAgY29uZmlybShtZXNzYWdlLCB5ZXNBY3Rpb24sIGNvb3JkcyA9IGZhbHNlLCBjbGFzc05hbWUgPSAnJykge1xuICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICBsZXQgaTE4biA9IG1pMThuLmN1cnJlbnQ7XG4gICAgbGV0IG92ZXJsYXkgPSBfdGhpcy5zaG93T3ZlcmxheSgpO1xuICAgIGxldCB5ZXMgPSBtKCdidXR0b24nLCBpMThuLnllcywge1xuICAgICAgY2xhc3NOYW1lOiAneWVzIGJ0biBidG4tc3VjY2VzcyBidG4tc20nXG4gICAgfSk7XG4gICAgbGV0IG5vID0gbSgnYnV0dG9uJywgaTE4bi5ubywge1xuICAgICAgY2xhc3NOYW1lOiAnbm8gYnRuIGJ0bi1kYW5nZXIgYnRuLXNtJ1xuICAgIH0pO1xuXG4gICAgbm8ub25jbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgX3RoaXMuY2xvc2VDb25maXJtKG92ZXJsYXkpO1xuICAgIH07XG5cbiAgICB5ZXMub25jbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgeWVzQWN0aW9uKCk7XG4gICAgICBfdGhpcy5jbG9zZUNvbmZpcm0ob3ZlcmxheSk7XG4gICAgfTtcblxuICAgIGxldCBidG5XcmFwID0gbSgnZGl2JywgW25vLCB5ZXNdLCB7Y2xhc3NOYW1lOiAnYnV0dG9uLXdyYXAnfSk7XG5cbiAgICBjbGFzc05hbWUgPSAnZm9ybS1idWlsZGVyLWRpYWxvZyAnICsgY2xhc3NOYW1lO1xuXG4gICAgbGV0IG1pbmlNb2RhbCA9IG0oJ2RpdicsIFttZXNzYWdlLCBidG5XcmFwXSwge2NsYXNzTmFtZX0pO1xuICAgIGlmICghY29vcmRzKSB7XG4gICAgICBjb25zdCBkRSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgcGFnZVg6IE1hdGgubWF4KGRFLmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKSAvIDIsXG4gICAgICAgIHBhZ2VZOiBNYXRoLm1heChkRS5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKSAvIDJcbiAgICAgIH07XG4gICAgICBtaW5pTW9kYWwuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW5pTW9kYWwuY2xhc3NMaXN0LmFkZCgncG9zaXRpb25lZCcpO1xuICAgIH1cblxuICAgIG1pbmlNb2RhbC5zdHlsZS5sZWZ0ID0gY29vcmRzLnBhZ2VYICsgJ3B4JztcbiAgICBtaW5pTW9kYWwuc3R5bGUudG9wID0gY29vcmRzLnBhZ2VZICsgJ3B4JztcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWluaU1vZGFsKTtcblxuICAgIHllcy5mb2N1cygpO1xuICAgIHJldHVybiBtaW5pTW9kYWw7XG4gIH1cblxuICAvKipcbiAgICogUG9wdXAgZGlhbG9nIHRoZSBkb2VzIG5vdCByZXF1aXJlIGNvbmZpcm1hdGlvbi5cbiAgICogQHBhcmFtICB7U3RyaW5nfERPTXxBcnJheX0gIGNvbnRlbnRcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gY29vcmRzICAgIGZhbHNlIGlmIG5vIGNvb3JkcyBhcmUgcHJvdmlkZWQuIFdpdGhvdXQgY29vcmRpbmF0ZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwb3B1cCB3aWxsIGFwcGVhciBjZW50ZXIgc2NyZWVuLlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9ICBjbGFzc05hbWUgY2xhc3NuYW1lIHRvIGJlIGFkZGVkIHRvIHRoZSBkaWFsb2dcbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgICAgIGRvbVxuICAgKi9cbiAgZGlhbG9nKGNvbnRlbnQsIGNvb3JkcyA9IGZhbHNlLCBjbGFzc05hbWUgPSAnJykge1xuICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICBsZXQgY2xpZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgbGV0IGNsaWVudEhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgX3RoaXMuc2hvd092ZXJsYXkoKTtcblxuICAgIGNsYXNzTmFtZSA9ICdmb3JtLWJ1aWxkZXItZGlhbG9nICcgKyBjbGFzc05hbWU7XG5cbiAgICBsZXQgbWluaU1vZGFsID0gdXRpbHMubWFya3VwKCdkaXYnLCBjb250ZW50LCB7Y2xhc3NOYW1lOiBjbGFzc05hbWV9KTtcbiAgICBpZiAoIWNvb3Jkcykge1xuICAgICAgY29vcmRzID0ge1xuICAgICAgICBwYWdlWDogTWF0aC5tYXgoY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApIC8gMixcbiAgICAgICAgcGFnZVk6IE1hdGgubWF4KGNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApIC8gMlxuICAgICAgfTtcbiAgICAgIG1pbmlNb2RhbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pbmlNb2RhbC5jbGFzc0xpc3QuYWRkKCdwb3NpdGlvbmVkJyk7XG4gICAgfVxuXG4gICAgbWluaU1vZGFsLnN0eWxlLmxlZnQgPSBjb29yZHMucGFnZVggKyAncHgnO1xuICAgIG1pbmlNb2RhbC5zdHlsZS50b3AgPSBjb29yZHMucGFnZVkgKyAncHgnO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtaW5pTW9kYWwpO1xuXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudHMubW9kYWxPcGVuZWQpO1xuXG4gICAgaWYgKGNsYXNzTmFtZS5pbmRleE9mKCdkYXRhLWRpYWxvZycpICE9PSAtMSkge1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudHMudmlld0RhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBtaW5pTW9kYWw7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybSBhbGwgZmllbGRzIHdpbGwgYmUgcmVtb3ZlZCB0aGVuIHJlbW92ZSB0aGVtXG4gICAqIEBwYXJhbSAge09iamVjdH0gZSBjbGljayBldmVudCBvYmplY3RcbiAgICovXG4gIGNvbmZpcm1SZW1vdmVBbGwoZSkge1xuICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgbGV0IGZvcm1JRCA9IGUudGFyZ2V0LmlkLm1hdGNoKC9mcm1iLVxcZHsxM30vKVswXTtcbiAgICBsZXQgc3RhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtSUQpO1xuICAgIGxldCBpMThuID0gbWkxOG4uY3VycmVudDtcbiAgICBsZXQgZmllbGRzID0gJCgnbGkuZm9ybS1maWVsZCcsIHN0YWdlKTtcbiAgICBsZXQgYnV0dG9uUG9zaXRpb24gPSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBsZXQgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBjb29yZHMgPSB7XG4gICAgICBwYWdlWDogYnV0dG9uUG9zaXRpb24ubGVmdCArIChidXR0b25Qb3NpdGlvbi53aWR0aCAvIDIpLFxuICAgICAgcGFnZVk6IChidXR0b25Qb3NpdGlvbi50b3AgLSBib2R5UmVjdC50b3ApIC0gMTJcbiAgICB9O1xuXG4gICAgaWYgKGZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIF90aGlzLmNvbmZpcm0oaTE4bi5jbGVhckFsbE1lc3NhZ2UsIGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5yZW1vdmVBbGxGaWVsZHMuY2FsbChfdGhpcywgc3RhZ2UpO1xuICAgICAgICBjb25maWcub3B0cy5ub3RpZnkuc3VjY2VzcyhpMThuLmFsbEZpZWxkc1JlbW92ZWQpO1xuICAgICAgICBjb25maWcub3B0cy5vbkNsZWFyQWxsKCk7XG4gICAgICB9LCBjb29yZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdGhpcy5kaWFsb2coaTE4bi5ub0ZpZWxkc1RvQ2xlYXIsIGNvb3Jkcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGZpZWxkcyBmcm9tIHRoZSBmb3JtXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gYW5pbWF0ZSB3aGV0aGVyIHRvIGFuaW1hdGUgb3Igbm90XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICByZW1vdmVBbGxGaWVsZHMoc3RhZ2UsIGFuaW1hdGUgPSB0cnVlKSB7XG4gICAgbGV0IF90aGlzID0gdGhpcztcbiAgICBsZXQgaTE4biA9IG1pMThuLmN1cnJlbnQ7XG4gICAgbGV0IG9wdHMgPSBjb25maWcub3B0cztcbiAgICBsZXQgZmllbGRzID0gc3RhZ2UucXVlcnlTZWxlY3RvckFsbCgnbGkuZm9ybS1maWVsZCcpO1xuICAgIGxldCBtYXJrRW1wdHlBcnJheSA9IFtdO1xuXG4gICAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMucHJlcGVuZCkge1xuICAgICAgbWFya0VtcHR5QXJyYXkucHVzaCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5hcHBlbmQpIHtcbiAgICAgIG1hcmtFbXB0eUFycmF5LnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXJrRW1wdHlBcnJheS5zb21lKGVsZW0gPT4gZWxlbSA9PT0gdHJ1ZSkpIHtcbiAgICAgIHN0YWdlLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZW1wdHknKTtcbiAgICAgIHN0YWdlLnBhcmVudEVsZW1lbnQuZGF0YXNldC5jb250ZW50ID0gaTE4bi5nZXRTdGFydGVkO1xuICAgIH1cblxuICAgIGlmIChhbmltYXRlKSB7XG4gICAgICBzdGFnZS5jbGFzc0xpc3QuYWRkKCdyZW1vdmluZycpO1xuICAgICAgbGV0IG91dGVySGVpZ2h0ID0gMDtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IG91dGVySGVpZ2h0ICs9IGZpZWxkLm9mZnNldEhlaWdodCArIDMpO1xuICAgICAgZmllbGRzWzBdLnN0eWxlLm1hcmdpblRvcCA9IGAkey1vdXRlckhlaWdodH1weGA7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZW1wdHkoc3RhZ2UpLmNsYXNzTGlzdC5yZW1vdmUoJ3JlbW92aW5nJyk7XG4gICAgICAgIF90aGlzLnNhdmUoc3RhZ2UpO1xuICAgICAgfSwgNDAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1wdHkoc3RhZ2UpO1xuICAgICAgX3RoaXMuc2F2ZShzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHVzZXIgcmUtb3JkZXJzIHRoZSBlbGVtZW50cyB0aGVpciBvcmRlciBzaG91bGQgYmUgc2F2ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkY2JVTCBvdXIgbGlzdCBvZiBlbGVtZW50c1xuICAgKi9cbiAgc2V0RmllbGRPcmRlcigkY2JVTCkge1xuICAgIGlmICghY29uZmlnLm9wdHMuc29ydGFibGVDb250cm9scykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBmaWVsZE9yZGVyID0ge307XG5cbiAgICAkY2JVTC5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgIGZpZWxkT3JkZXJbaW5kZXhdID0gJChlbGVtZW50KS5kYXRhKCd0eXBlJyk7XG4gICAgfSk7XG5cbiAgICBpZiAod2luZG93LnNlc3Npb25TdG9yYWdlKSB7XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZmllbGRPcmRlcicsIHdpbmRvdy5KU09OLnN0cmluZ2lmeShmaWVsZE9yZGVyKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlb3JkZXIgdGhlIGNvbnRyb2xzIGlmIHRoZSB1c2VyIGhhcyBwcmV2aW91c2x5IG9yZGVyZWQgdGhlbS5cbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXl9IGZybWJGaWVsZHNcbiAgICogQHJldHVybiB7QXJyYXl9IG9yZGVyZWQgZmllbGRzXG4gICAqL1xuICBvcmRlckZpZWxkcyhmcm1iRmllbGRzKSB7XG4gICAgY29uc3Qgb3B0cyA9IGNvbmZpZy5vcHRzO1xuICAgIGxldCBmaWVsZE9yZGVyID0gZmFsc2U7XG4gICAgbGV0IG5ld09yZGVyRmllbGRzID0gW107XG5cbiAgICBpZiAod2luZG93LnNlc3Npb25TdG9yYWdlKSB7XG4gICAgICBpZiAob3B0cy5zb3J0YWJsZUNvbnRyb2xzKSB7XG4gICAgICAgIGZpZWxkT3JkZXIgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZmllbGRPcmRlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2ZpZWxkT3JkZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZpZWxkT3JkZXIpIHtcbiAgICAgIGxldCBjb250cm9sT3JkZXIgPSBvcHRzLmNvbnRyb2xPcmRlci5jb25jYXQoZnJtYkZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICAgICAgZmllbGQuYXR0cnMudHlwZSkpO1xuICAgICAgZmllbGRPcmRlciA9IHV0aWxzLnVuaXF1ZShjb250cm9sT3JkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZE9yZGVyID0gd2luZG93LkpTT04ucGFyc2UoZmllbGRPcmRlcik7XG4gICAgICBmaWVsZE9yZGVyID0gT2JqZWN0LmtleXMoZmllbGRPcmRlcikubWFwKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkT3JkZXJbaV07XG4gICAgICB9KTtcbiAgICB9XG5cblxuICAgIGZpZWxkT3JkZXIuZm9yRWFjaCgoZmllbGRUeXBlKSA9PiB7XG4gICAgICBsZXQgZmllbGQgPSBmcm1iRmllbGRzLmZpbHRlcihmdW5jdGlvbihmaWVsZCkge1xuICAgICAgICByZXR1cm4gZmllbGQuYXR0cnMudHlwZSA9PT0gZmllbGRUeXBlO1xuICAgICAgfSlbMF07XG4gICAgICBuZXdPcmRlckZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdPcmRlckZpZWxkcy5maWx0ZXIoQm9vbGVhbik7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgZmllbGRzIGJlaW5nIGVkaXRpbmdcbiAgICogQHBhcmFtICB7T2JqZWN0fSBzdGFnZVxuICAgKi9cbiAgY2xvc2VBbGxFZGl0KCkge1xuICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICBjb25zdCBmaWVsZHMgPSAkKCc+IGxpLmVkaXRpbmcnLCBfdGhpcy5kLnN0YWdlKTtcbiAgICBjb25zdCB0b2dnbGVCdG5zID0gJCgnLnRvZ2dsZS1mb3JtJywgX3RoaXMuZC5zdGFnZSk7XG4gICAgY29uc3QgZWRpdFBhbmVscyA9ICQoJy5mcm0taG9sZGVyJywgZmllbGRzKTtcblxuICAgIHRvZ2dsZUJ0bnMucmVtb3ZlQ2xhc3MoJ29wZW4nKTtcbiAgICBmaWVsZHMucmVtb3ZlQ2xhc3MoJ2VkaXRpbmcnKTtcbiAgICAkKCcucHJldi1ob2xkZXInLCBmaWVsZHMpLnNob3coKTtcbiAgICBlZGl0UGFuZWxzLmhpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBlZGl0IG1vZGUgZm9yIHRoZSBnaXZlbiBmaWVsZFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGZpZWxkSWRcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gYW5pbWF0ZVxuICAgKi9cbiAgdG9nZ2xlRWRpdChmaWVsZElkLCBhbmltYXRlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRJZCk7XG4gICAgY29uc3QgdG9nZ2xlQnRuID0gJCgnLnRvZ2dsZS1mb3JtJywgZmllbGQpO1xuICAgIGNvbnN0IGVkaXRQYW5lbCA9ICQoJy5mcm0taG9sZGVyJywgZmllbGQpO1xuICAgIGZpZWxkLmNsYXNzTGlzdC50b2dnbGUoJ2VkaXRpbmcnKTtcbiAgICB0b2dnbGVCdG4udG9nZ2xlQ2xhc3MoJ29wZW4nKTtcbiAgICBpZiAoYW5pbWF0ZSkge1xuICAgICAgJCgnLnByZXYtaG9sZGVyJywgZmllbGQpLnNsaWRlVG9nZ2xlKDI1MCk7XG4gICAgICBlZGl0UGFuZWwuc2xpZGVUb2dnbGUoMjUwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJCgnLnByZXYtaG9sZGVyJywgZmllbGQpLnRvZ2dsZSgpO1xuICAgICAgZWRpdFBhbmVsLnRvZ2dsZSgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVByZXZpZXcoJChmaWVsZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIGZvbGxvdyBzY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZWRpdG9yXG4gICAqL1xuICBzdGlja3lDb250cm9scygpIHtcbiAgICBsZXQgZCA9IHRoaXMuZDtcbiAgICBjb25zdCAkY2JXcmFwID0gJChkLmNvbnRyb2xzKS5wYXJlbnQoKTtcbiAgICBjb25zdCAkc3RhZ2VXcmFwID0gJChkLnN0YWdlKS5wYXJlbnQoKTtcbiAgICBjb25zdCBjYldpZHRoID0gJGNiV3JhcC53aWR0aCgpO1xuICAgIGNvbnN0IGNiUG9zaXRpb24gPSBkLmNvbnRyb2xzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbihldnQpIHtcbiAgICAgIGxldCBzY3JvbGxUb3AgPSAkKGV2dC50YXJnZXQpLnNjcm9sbFRvcCgpO1xuICAgICAgY29uc3Qgb2Zmc2V0RGVmYXVsdHMgPSB7XG4gICAgICAgIHRvcDogNSxcbiAgICAgICAgYm90dG9tOiAnYXV0bycsXG4gICAgICAgIHJpZ2h0OiAnYXV0bycsXG4gICAgICAgIGxlZnQ6IGNiUG9zaXRpb24ubGVmdFxuICAgICAgfTtcblxuICAgICAgbGV0IG9mZnNldCA9IE9iamVjdC5hc3NpZ24oe30sIG9mZnNldERlZmF1bHRzLCBjb25maWcub3B0cy5zdGlja3lDb250cm9scy5vZmZzZXQpO1xuXG4gICAgICBpZiAoc2Nyb2xsVG9wID4gJHN0YWdlV3JhcC5vZmZzZXQoKS50b3ApIHtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgd2lkdGg6IGNiV2lkdGhcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjYlN0eWxlID0gT2JqZWN0LmFzc2lnbihzdHlsZSwgb2Zmc2V0KTtcblxuICAgICAgICBsZXQgY2JPZmZzZXQgPSAkY2JXcmFwLm9mZnNldCgpO1xuICAgICAgICBsZXQgc3RhZ2VPZmZzZXQgPSAkc3RhZ2VXcmFwLm9mZnNldCgpO1xuICAgICAgICBsZXQgY2JCb3R0b20gPSBjYk9mZnNldC50b3AgKyAkY2JXcmFwLmhlaWdodCgpO1xuICAgICAgICBsZXQgc3RhZ2VCb3R0b20gPSBzdGFnZU9mZnNldC50b3AgKyAkc3RhZ2VXcmFwLmhlaWdodCgpO1xuXG4gICAgICAgIGlmIChjYkJvdHRvbSA+IHN0YWdlQm90dG9tICYmIChjYk9mZnNldC50b3AgIT09IHN0YWdlT2Zmc2V0LnRvcCkpIHtcbiAgICAgICAgICAkY2JXcmFwLmNzcyh7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIHRvcDogJ2F1dG8nLFxuICAgICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICBsZWZ0OiAnYXV0bydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYkJvdHRvbSA8IHN0YWdlQm90dG9tIHx8IChjYkJvdHRvbSA9PT0gc3RhZ2VCb3R0b20gJiYgY2JPZmZzZXQudG9wID4gc2Nyb2xsVG9wKSkge1xuICAgICAgICAgICRjYldyYXAuY3NzKGNiU3R5bGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkLmNvbnRyb2xzLnBhcmVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSBkaWFsb2cgd2l0aCB0aGUgZm9ybSdzIGRhdGFcbiAgICovXG4gIHNob3dEYXRhKGUpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdXRpbHMuZXNjYXBlSHRtbChkYXRhLmZvcm1EYXRhKTtcbiAgICBjb25zdCBjb2RlID0gbSgnY29kZScsIGZvcm1EYXRhLCB7XG4gICAgICBjbGFzc05hbWU6IGBmb3JtRGF0YS0ke2NvbmZpZy5vcHRzLmRhdGFUeXBlfWBcbiAgICB9KTtcblxuICAgIHRoaXMuZGlhbG9nKG0oJ3ByZScsIGNvZGUpLCBudWxsLCAnZGF0YS1kaWFsb2cnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBmaWVsZCBmcm9tIHRoZSBzdGFnZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9ICBmaWVsZElEIElEIG9mIHRoZSBmaWVsZCB0byBiZSByZW1vdmVkXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGZpZWxkUmVtb3ZlZCByZXR1cm5zIHRydWUgaWYgZmllbGQgaXMgcmVtb3ZlZFxuICAgKi9cbiAgcmVtb3ZlRmllbGQoZmllbGRJRCkge1xuICAgIGxldCBmaWVsZFJlbW92ZWQgPSBmYWxzZTtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmQuc3RhZ2U7XG4gICAgY29uc3QgZmllbGRzID0gZm9ybS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmb3JtLWZpZWxkJyk7XG5cbiAgICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gZmllbGRzIHRvIHJlbW92ZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghZmllbGRJRCkge1xuICAgICAgbGV0IGF2YWlsYWJsZUlkcyA9IFtdLnNsaWNlLmNhbGwoZmllbGRzKS5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5pZDtcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS53YXJuKCdmaWVsZElEIHJlcXVpcmVkIHRvIHJlbW92ZSBzcGVjaWZpYyBmaWVsZHMuIFJlbW92aW5nIGxhc3QgZmllbGQgc2luY2Ugbm8gSUQgd2FzIHN1cHBsaWVkLicpO1xuICAgICAgY29uc29sZS53YXJuKCdBdmFpbGFibGUgSURzOiAnICsgYXZhaWxhYmxlSWRzLmpvaW4oJywgJykpO1xuICAgICAgZmllbGRJRCA9IGZvcm0ubGFzdENoaWxkLmlkO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRJRCk7XG4gICAgY29uc3QgJGZpZWxkID0gJChmaWVsZCk7XG4gICAgaWYgKCFmaWVsZCkge1xuICAgICAgY29uc29sZS53YXJuKCdGaWVsZCBub3QgZm91bmQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAkZmllbGQuc2xpZGVVcCgyNTAsIGZ1bmN0aW9uKCkge1xuICAgICAgJGZpZWxkLnJlbW92ZUNsYXNzKCdkZWxldGluZycpO1xuICAgICAgJGZpZWxkLnJlbW92ZSgpO1xuICAgICAgZmllbGRSZW1vdmVkID0gdHJ1ZTtcbiAgICAgIF90aGlzLnNhdmUoKTtcbiAgICAgIGlmICghZm9ybS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICBsZXQgc3RhZ2VXcmFwID0gZm9ybS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LmFkZCgnZW1wdHknKTtcbiAgICAgICAgc3RhZ2VXcmFwLmRhdGFzZXQuY29udGVudCA9IG1pMThuLmN1cnJlbnQuZ2V0U3RhcnRlZDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnRzLmZpZWxkUmVtb3ZlZCk7XG4gICAgcmV0dXJuIGZpZWxkUmVtb3ZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBtYXJrdXAgZm9yIGZvcm0gYWN0aW9uIGJ1dHRvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBidXR0b25EYXRhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRE9NIGVsZW1lbnQgZm9yIGFjdGlvbiBidXR0b25cbiAgICovXG4gIHByb2Nlc3NBY3Rpb25CdXR0b25zKGJ1dHRvbkRhdGEpIHtcbiAgICBsZXQge2xhYmVsLCBldmVudHMsIC4uLmF0dHJzfSA9IGJ1dHRvbkRhdGE7XG4gICAgbGV0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgaWYgKCFsYWJlbCkge1xuICAgICAgaWYgKGF0dHJzLmlkKSB7XG4gICAgICAgIGxhYmVsID0gbWkxOG4uY3VycmVudFthdHRycy5pZF0gfHwgdXRpbHMuY2FwaXRhbGl6ZShhdHRycy5pZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYWJlbCA9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsYWJlbCA9IG1pMThuLmN1cnJlbnRbbGFiZWxdIHx8ICcnO1xuICAgIH1cblxuICAgIGlmICghYXR0cnMuaWQpIHtcbiAgICAgIGF0dHJzLmlkID0gYCR7ZGF0YS5mb3JtSUR9LWFjdGlvbi0ke01hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxMDAwKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRycy5pZCA9IGAke2RhdGEuZm9ybUlEfS0ke2F0dHJzLmlkfS1hY3Rpb25gO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1dHRvbiA9IG0oJ2J1dHRvbicsIGxhYmVsLCBhdHRycyk7XG5cbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBmb3IgKGxldCBldmVudCBpbiBldmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcbiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZXZ0ID0+IGV2ZW50c1tldmVudF0oZXZ0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYnV0dG9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENyb3NzIGxpbmsgc3VidHlwZXMgYW5kIGRlZmluZSBtYXJrdXAgY29uZmlnXG4gICAqIEBwYXJhbSAge0FycmF5fSBzdWJ0eXBlT3B0c1xuICAgKiBAcmV0dXJuIHtBcnJheX0gc3VidHlwZXNcbiAgICovXG4gIHByb2Nlc3NTdWJ0eXBlcyhzdWJ0eXBlT3B0cykge1xuICAgIGxldCBzdWJ0eXBlcyA9IHt9O1xuICAgIGNvbnN0IHN1YnR5cGVGb3JtYXQgPSBzdWJ0eXBlID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbDogbWkxOG4uZ2V0KHN1YnR5cGUpLFxuICAgICAgICAgIHZhbHVlOiBzdWJ0eXBlXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBjb25maWcuc3VidHlwZXMgPSB1dGlscy5tZXJnZShkZWZhdWx0U3VidHlwZXMsIHN1YnR5cGVPcHRzKTtcblxuICAgICAgZm9yIChsZXQgc3VidHlwZSBpbiBjb25maWcuc3VidHlwZXMpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5zdWJ0eXBlcy5oYXNPd25Qcm9wZXJ0eShzdWJ0eXBlKSkge1xuICAgICAgICAgIHN1YnR5cGVzW3N1YnR5cGVdID0gY29uZmlnLnN1YnR5cGVzW3N1YnR5cGVdLm1hcChzdWJ0eXBlRm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VidHlwZXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgc3RhZ2UgYW5kIGNvbnRyb2xzIGRvbSBlbGVtZW50c1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGZvcm1JRCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBlZGl0b3JVSShmb3JtSUQpIHtcbiAgICBsZXQgZCA9IHRoaXMuZDtcbiAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBkLnN0YWdlID0gbSgndWwnLCBudWxsLCB7XG4gICAgICAgIGlkOiBkYXRhLmZvcm1JRCxcbiAgICAgICAgY2xhc3NOYW1lOiAnZnJtYidcbiAgICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGRyYWdnYWJsZSBmaWVsZHMgZm9yIGZvcm1CdWlsZGVyXG4gICAgZC5jb250cm9scyA9IG0oJ3VsJywgbnVsbCwge1xuICAgICAgaWQ6IGAke2RhdGEuZm9ybUlEfS1jb250cm9sLWJveGAsXG4gICAgICBjbGFzc05hbWU6ICdmcm1iLWNvbnRyb2wnXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB1c2VyIG9wdGlvbnMgZm9yIGFjdGlvbkJ1dHRvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge09iamVjdH0gcHJvY2Vzc2VkT3B0aW9uc1xuICAgKi9cbiAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICBsZXQge2ZpZWxkcyA9IFtdLCB0ZW1wbGF0ZXMsIC4uLm9wdHN9ID0gb3B0aW9ucztcbiAgICBsZXQgYWN0aW9uQnV0dG9ucyA9IFt7XG4gICAgICBpZDogJ2NsZWFyJyxcbiAgICAgIGNsYXNzTmFtZTogJ2NsZWFyLWFsbCBidG4gYnRuLWRhbmdlcicsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2s6IF90aGlzLmNvbmZpcm1SZW1vdmVBbGwuYmluZChfdGhpcylcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBsYWJlbDogJ3ZpZXdKU09OJyxcbiAgICAgIGlkOiAnZGF0YScsXG4gICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRlZmF1bHQnLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrOiBfdGhpcy5zaG93RGF0YS5iaW5kKF90aGlzKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGlkOiAnc2F2ZScsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tcHJpbWFyeSBzYXZlLXRlbXBsYXRlJyxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljazogZXZ0ID0+IHtcbiAgICAgICAgICBfdGhpcy5zYXZlKCk7XG4gICAgICAgICAgY29uZmlnLm9wdHMub25TYXZlKGV2dCwgX3RoaXMuZGF0YS5mb3JtRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XTtcblxuICAgIGxldCBkZWZhdWx0RmllbGRzID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogbWkxOG4uZ2V0KCdhdXRvY29tcGxldGUnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAnYXV0b2NvbXBsZXRlJ1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2J1dHRvbicpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2NoZWNrYm94R3JvdXAnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAnY2hlY2tib3gtZ3JvdXAnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2RhdGVGaWVsZCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogbWkxOG4uZ2V0KCdmaWxlVXBsb2FkJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2hlYWRlcicpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdoZWFkZXInLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2hpZGRlbicpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ251bWJlcicpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ3BhcmFncmFwaCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ3JhZGlvR3JvdXAnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAncmFkaW8tZ3JvdXAnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ3NlbGVjdCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ3RleHQnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgndGV4dEFyZWEnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuXG4gICAgb3B0cy5maWVsZHMgPSBmaWVsZHMuY29uY2F0KGRlZmF1bHRGaWVsZHMpO1xuICAgIGNvbmZpZy5vcHRzID0gT2JqZWN0LmFzc2lnbih7fSwge2FjdGlvbkJ1dHRvbnMsIHRlbXBsYXRlcywgZmllbGRzfSwgb3B0cyk7XG4gICAgbGV0IHVzZXJUZW1wbGF0ZXMgPSBPYmplY3Qua2V5cyhjb25maWcub3B0cy50ZW1wbGF0ZXMpLm1hcChrZXkgPT4ge1xuICAgICAgcmV0dXJuIFtrZXksIGNvbmZpZy5vcHRzLnRlbXBsYXRlc1trZXldXTtcbiAgICB9KTtcbiAgICB1dGlscy50ZW1wbGF0ZXMgPSB1dGlscy50ZW1wbGF0ZXMuY29uY2F0KHVzZXJUZW1wbGF0ZXMpO1xuXG4gICAgcmV0dXJuIGNvbmZpZy5vcHRzO1xuICB9XG5cblxuICAvLyBlbmQgY2xhc3Ncbn1cblxuLy8gZXhwb3J0IGRlZmF1bHQgSGVscGVycztcbiIsIi8qKlxuICogUG9seWZpbGxzIGZvciBvbGRlciBicm93c2VycyBhbmQgYWRkZWQgZnVuY3Rpb25hbGl0eVxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcG9seWZpbGxzKCkge1xuICAvLyBFbGVtZW50LnJlbW92ZSgpIHBvbHlmaWxsXG4gIGlmICghKCdyZW1vdmUnIGluIEVsZW1lbnQucHJvdG90eXBlKSkge1xuICAgIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSkge1xuICAgICAgICB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIEV2ZW50IHBvbHlmaWxsXG4gIGlmICh0eXBlb2YgRXZlbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB3aW5kb3cuRXZlbnQgPSBmdW5jdGlvbihldnQpIHtcbiAgICAgICAgbGV0IGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICAgIGV2ZW50LmluaXRFdmVudChldnQsIHRydWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9O1xuICAgIH0pKCk7XG4gIH1cblxuICAvLyBPYmplY3QuYXNzaWduIHBvbHlmaWxsXG4gIGlmICh0eXBlb2YgT2JqZWN0LmFzc2lnbiAhPSAnZnVuY3Rpb24nKSB7XG4gICAgT2JqZWN0LmFzc2lnbiA9IGZ1bmN0aW9uKHRhcmdldCkge1xuICAgICAgJ3VzZSBzdHJpY3QnO1xuICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgICAgfVxuXG4gICAgICB0YXJnZXQgPSBPYmplY3QodGFyZ2V0KTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGxldCBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICBpZiAoc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xuICB9XG5cblxuICAvLyBSZWZlcmVuY2U6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuNC40LjE4XG4gIGlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICBsZXQgVCwgaztcbiAgICAgIGlmICh0aGlzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgIGxldCBsZW4gPSBPLmxlbmd0aCA+Pj4gMDtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBUID0gYXJndW1lbnRzWzFdO1xuICAgICAgfVxuICAgICAgayA9IDA7XG4gICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICBsZXQga1ZhbHVlO1xuICAgICAgICBpZiAoayBpbiBPKSB7XG4gICAgICAgICAga1ZhbHVlID0gT1trXTtcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgIH1cbiAgICAgICAgaysrO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcG9seWZpbGxzKCk7XG4iLCJpbXBvcnQge2RlZmF1bHRTdWJ0eXBlcywgZmlsdGVyfSBmcm9tICcuL2RvbSc7XG5cbi8qKlxuICogQ3Jvc3MgZmlsZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBhcnJheXMsXG4gKiBzb3J0aW5nIGFuZCBvdGhlciBmdW4gc3R1ZmZcbiAqIEByZXR1cm4ge09iamVjdH0gdXRpbHNcbiAqL1xuLy8gZnVuY3Rpb24gdXRpbHMoKSB7XG4gIGNvbnN0IHV0aWxzID0ge307XG4gIHdpbmRvdy5mYkxvYWRlZCA9IHtcbiAgICBqczogW10sXG4gICAgY3NzOiBbXVxuICB9O1xuICB3aW5kb3cuZmJFZGl0b3JzID0ge1xuICAgIHF1aWxsOiB7fSxcbiAgICB0aW55bWNlOiB7fVxuICB9O1xuXG4gIC8vIGNsZWFuZXIgc3ludGF4IGZvciB0ZXN0aW5nIGluZGV4T2YgZWxlbWVudFxuICB1dGlscy5pbkFycmF5ID0gZnVuY3Rpb24obmVlZGxlLCBoYXlzdGFjaykge1xuICAgIHJldHVybiBoYXlzdGFjay5pbmRleE9mKG5lZWRsZSkgIT09IC0xO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXR0cnMge2F0dHJOYW1lOiBhdHRyVmFsdWV9XG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgT2JqZWN0IHRyaW1tZWQgb2YgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzXG4gICAqL1xuICB1dGlscy50cmltT2JqID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBsZXQgeG1sUmVtb3ZlID0gW1xuICAgICAgbnVsbCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgICcnLFxuICAgICAgZmFsc2UsXG4gICAgICAnZmFsc2UnXG4gICAgXTtcbiAgICBmb3IgKGxldCBhdHRyIGluIGF0dHJzKSB7XG4gICAgICBpZiAodXRpbHMuaW5BcnJheShhdHRyc1thdHRyXSwgeG1sUmVtb3ZlKSkge1xuICAgICAgICBkZWxldGUgYXR0cnNbYXR0cl07XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXR0cnNbYXR0cl0pKSB7XG4gICAgICAgIGlmICghYXR0cnNbYXR0cl0ubGVuZ3RoKSB7XG4gICAgICAgICAgZGVsZXRlIGF0dHJzW2F0dHJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUZXN0IGlmIGF0dHJpYnV0ZSBpcyBhIHZhbGlkIEhUTUwgYXR0cmlidXRlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXR0clxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgdXRpbHMudmFsaWRBdHRyID0gZnVuY3Rpb24oYXR0cikge1xuICAgIGxldCBpbnZhbGlkID0gW1xuICAgICAgJ3ZhbHVlcycsXG4gICAgICAnZW5hYmxlT3RoZXInLFxuICAgICAgJ290aGVyJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAvLyAnc3R5bGUnLFxuICAgICAgJ3N1YnR5cGUnXG4gICAgXTtcbiAgICByZXR1cm4gIXV0aWxzLmluQXJyYXkoYXR0ciwgaW52YWxpZCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gYXR0cnMgb2JqZWN0IGludG8gYSBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhdHRycyBvYmplY3Qgb2YgYXR0cmlidXRlcyBmb3IgbWFya3VwXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHV0aWxzLmF0dHJTdHJpbmcgPSBmdW5jdGlvbihhdHRycykge1xuICAgIGxldCBhdHRyaWJ1dGVzID0gW107XG5cbiAgICBmb3IgKGxldCBhdHRyIGluIGF0dHJzKSB7XG4gICAgICBpZiAoYXR0cnMuaGFzT3duUHJvcGVydHkoYXR0cikgJiYgdXRpbHMudmFsaWRBdHRyKGF0dHIpKSB7XG4gICAgICAgIGF0dHIgPSB1dGlscy5zYWZlQXR0cihhdHRyLCBhdHRyc1thdHRyXSk7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChhdHRyLm5hbWUgKyBhdHRyLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuam9pbignICcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGF0dHJpYnV0ZXMgdG8gbWFya3VwIHNhZmUgc3RyaW5nc1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWUgIGF0dHJpYnV0ZSBuYW1lXG4gICAqIEBwYXJhbSAge1N0cmluZ30gdmFsdWUgYXR0cmlidXRlIHZhbHVlXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAge2F0dHJOYW1lOiBhdHRyVmFsdWV9XG4gICAqL1xuICB1dGlscy5zYWZlQXR0ciA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IHV0aWxzLnNhZmVBdHRyTmFtZShuYW1lKTtcbiAgICBsZXQgdmFsU3RyaW5nO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsU3RyaW5nID0gdXRpbHMuZXNjYXBlQXR0cih2YWx1ZS5qb2luKCcgJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICdib29sZWFuJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxTdHJpbmcgPSB1dGlscy5lc2NhcGVBdHRyKHZhbHVlLnJlcGxhY2UoJywnLCAnICcpLnRyaW0oKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA/IGA9XCIke3ZhbFN0cmluZ31cImAgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlXG4gICAgfTtcbiAgfTtcblxuICB1dGlscy5zYWZlQXR0ck5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbGV0IHNhZmVBdHRyID0ge1xuICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnXG4gICAgfTtcblxuICAgIHJldHVybiBzYWZlQXR0cltuYW1lXSB8fCB1dGlscy5oeXBoZW5DYXNlKG5hbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHN0cmluZ3MgaW50byBsb3dlcmNhc2UtaHlwaGVuXG4gICAqXG4gICAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICovXG4gIHV0aWxzLmh5cGhlbkNhc2UgPSAoc3RyKSA9PiB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1teXFx3XFxzXFwtXS9naSwgJycpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uKCQxKSB7XG4gICAgICByZXR1cm4gJy0nICsgJDEudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFxzL2csICctJykucmVwbGFjZSgvXi0rL2csICcnKTtcbiAgfTtcblxuICAvKipcbiAgICogY29udmVydCBhIGh5cGhlbmF0ZWQgc3RyaW5nIHRvIGNhbWVsQ2FzZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHN0clxuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqL1xuICB1dGlscy5jYW1lbENhc2UgPSBzdHIgPT4gc3RyLnJlcGxhY2UoLy0oW2Etel0pL2csIChtLCB3KSA9PlxuICAgIHcudG9VcHBlckNhc2UoKSk7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBjb250ZW50IHR5cGVcbiAgICogQHBhcmFtICB7Tm9kZSB8IFN0cmluZyB8IEFycmF5IHwgT2JqZWN0fSBjb250ZW50XG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGUgZm9yIG1hcHBpbmdcbiAgICovXG4gIHV0aWxzLmNvbnRlbnRUeXBlID0gY29udGVudCA9PiB7XG4gICAgbGV0IHR5cGUgPSB0eXBlb2YgY29udGVudDtcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIE5vZGUgfHwgY29udGVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICB0eXBlID0gJ25vZGUnO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb250ZW50KSkge1xuICAgICAgdHlwZSA9ICdhcnJheSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIEJpbmQgZXZlbnRzIHRvIGFuIGVsZW1lbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBlbGVtZW50IERPTSBlbGVtZW50XG4gICAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRzICBvYmplY3QgZnVsbCBvZiBldmVudHMgZWcuIHtjbGljazogZXZ0ID0+IGNhbGxiYWNrfVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgdXRpbHMuYmluZEV2ZW50cyA9IChlbGVtZW50LCBldmVudHMpID0+IHtcbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBmb3IgKGxldCBldmVudCBpbiBldmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcbiAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGV2dCA9PiBldmVudHNbZXZlbnRdKGV2dCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgYXR0cmlidXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgIG5hbWVcbiAqL1xuICB1dGlscy5uYW1lQXR0ciA9IGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgbGV0IGVwb2NoID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgbGV0IHByZWZpeCA9IGZpZWxkLnR5cGUgfHwgdXRpbHMuaHlwaGVuQ2FzZShmaWVsZC5sYWJlbCk7XG4gICAgcmV0dXJuIHByZWZpeCArICctJyArIGVwb2NoO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBtYXJrdXAgd3JhcHBlciB3aGVyZSBuZWVkZWRcbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICAgdGFnXG4gICAqIEBwYXJhbSAge1N0cmluZ3xBcnJheXxPYmplY3R9IGNvbnRlbnQgd2Ugd3JhcCB0aGlzXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgICAgICAgIGF0dHJzXG4gICAqIEByZXR1cm4ge09iamVjdH0gRE9NIEVsZW1lbnRcbiAgICovXG4gIHV0aWxzLm1hcmt1cCA9IGZ1bmN0aW9uKHRhZywgY29udGVudCA9ICcnLCBhdHRyaWJ1dGVzID0ge30pIHtcbiAgICBsZXQgY29udGVudFR5cGUgPSB1dGlscy5jb250ZW50VHlwZShjb250ZW50KTtcbiAgICBsZXQge2V2ZW50cywgLi4uYXR0cnN9ID0gYXR0cmlidXRlcztcbiAgICBjb25zdCBmaWVsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcblxuICAgIGNvbnN0IGFwcGVuZENvbnRlbnQgPSB7XG4gICAgICBzdHJpbmc6IChjb250ZW50KSA9PiB7XG4gICAgICAgIGZpZWxkLmlubmVySFRNTCArPSBjb250ZW50O1xuICAgICAgfSxcbiAgICAgIG9iamVjdDogKGNvbmZpZykgPT4ge1xuICAgICAgICBsZXQge3RhZywgY29udGVudCwgLi4uZGF0YX0gPSBjb25maWc7XG4gICAgICAgIHJldHVybiBmaWVsZC5hcHBlbmRDaGlsZCh1dGlscy5tYXJrdXAodGFnLCBjb250ZW50LCBkYXRhKSk7XG4gICAgICB9LFxuICAgICAgbm9kZTogKGNvbnRlbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgICAgfSxcbiAgICAgIGFycmF5OiAoY29udGVudCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb250ZW50VHlwZSA9IHV0aWxzLmNvbnRlbnRUeXBlKGNvbnRlbnRbaV0pO1xuICAgICAgICAgIGFwcGVuZENvbnRlbnRbY29udGVudFR5cGVdKGNvbnRlbnRbaV0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb246IGNvbnRlbnQgPT4ge1xuICAgICAgICBjb250ZW50ID0gY29udGVudCgpO1xuICAgICAgICBjb250ZW50VHlwZSA9IHV0aWxzLmNvbnRlbnRUeXBlKGNvbnRlbnQpO1xuICAgICAgICBhcHBlbmRDb250ZW50W2NvbnRlbnRUeXBlXShjb250ZW50KTtcbiAgICAgIH0sXG4gICAgICB1bmRlZmluZWQ6ICgpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcih0YWcsIGNvbnRlbnQsIGF0dHJpYnV0ZXMpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgYXR0ciBpbiBhdHRycykge1xuICAgICAgaWYgKGF0dHJzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICAgIGxldCBuYW1lID0gdXRpbHMuc2FmZUF0dHJOYW1lKGF0dHIpO1xuICAgICAgICBmaWVsZC5zZXRBdHRyaWJ1dGUobmFtZSwgYXR0cnNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50KSB7XG4gICAgICBhcHBlbmRDb250ZW50W2NvbnRlbnRUeXBlXS5jYWxsKHRoaXMsIGNvbnRlbnQpO1xuICAgIH1cblxuICAgIHV0aWxzLmJpbmRFdmVudHMoZmllbGQsIGV2ZW50cyk7XG5cbiAgICByZXR1cm4gZmllbGQ7XG4gIH07XG4gIGNvbnN0IG0gPSB1dGlscy5tYXJrdXA7XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgaHRtbCBlbGVtZW50IGF0dHJpYnV0ZXMgdG8ga2V5L3ZhbHVlIG9iamVjdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGVsZW0gRE9NIGVsZW1lbnRcbiAgICogQHJldHVybiB7T2JqZWN0fSBleDoge2F0dHJOYW1lOiBhdHRyVmFsdWV9XG4gICAqL1xuICB1dGlscy5wYXJzZUF0dHJzID0gZnVuY3Rpb24oZWxlbSkge1xuICAgIGxldCBhdHRycyA9IGVsZW0uYXR0cmlidXRlcztcbiAgICBsZXQgZGF0YSA9IHt9O1xuICAgIHV0aWxzLmZvckVhY2goYXR0cnMsIGF0dHIgPT4ge1xuICAgICAgbGV0IGF0dHJWYWwgPSBhdHRyc1thdHRyXS52YWx1ZTtcbiAgICAgIGlmIChhdHRyVmFsLm1hdGNoKC9mYWxzZXx0cnVlL2cpKSB7XG4gICAgICAgIGF0dHJWYWwgPSAoYXR0clZhbCA9PT0gJ3RydWUnKTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0clZhbC5tYXRjaCgvdW5kZWZpbmVkL2cpKSB7XG4gICAgICAgIGF0dHJWYWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRyVmFsKSB7XG4gICAgICAgIGRhdGFbYXR0cnNbYXR0cl0ubmFtZV0gPSBhdHRyVmFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgZmllbGQgb3B0aW9ucyB0byBvcHRpb25EYXRhXG4gICAqIEBwYXJhbSAge05vZGVMaXN0fSBvcHRpb25zICBET00gZWxlbWVudHNcbiAgICogQHJldHVybiB7QXJyYXl9IG9wdGlvbkRhdGEgYXJyYXlcbiAgICovXG4gIHV0aWxzLnBhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBsZXQgb3B0aW9uRGF0YSA9IHt9O1xuICAgIGxldCBkYXRhID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9wdGlvbkRhdGEgPSB1dGlscy5wYXJzZUF0dHJzKG9wdGlvbnNbaV0pO1xuICAgICAgb3B0aW9uRGF0YS5sYWJlbCA9IG9wdGlvbnNbaV0udGV4dENvbnRlbnQ7XG4gICAgICBkYXRhLnB1c2gob3B0aW9uRGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIFhNTCBmb3JtRGF0YVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHhtbFN0cmluZ1xuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgICAgICBmb3JtRGF0YSBhcnJheVxuICAgKi9cbiAgdXRpbHMucGFyc2VYTUwgPSBmdW5jdGlvbih4bWxTdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuICAgIGxldCB4bWwgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgJ3RleHQveG1sJyk7XG4gICAgbGV0IGZvcm1EYXRhID0gW107XG5cbiAgICBpZiAoeG1sKSB7XG4gICAgICBsZXQgZmllbGRzID0geG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmaWVsZCcpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGZpZWxkRGF0YSA9IHV0aWxzLnBhcnNlQXR0cnMoZmllbGRzW2ldKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3B0aW9uJyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBmaWVsZERhdGEudmFsdWVzID0gdXRpbHMucGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybURhdGEucHVzaChmaWVsZERhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydHMgZXNjYXBlZCBIVE1MIGludG8gdXNhYmxlIEhUTUxcbiAgICogQHBhcmFtICB7U3RyaW5nfSBodG1sIGVzY2FwZWQgSFRNTFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgcGFyc2VkIEhUTUxcbiAgICovXG4gIHV0aWxzLnBhcnNlZEh0bWwgPSBmdW5jdGlvbihodG1sKSB7XG4gICAgbGV0IGVzY2FwZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGVzY2FwZUVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZXNjYXBlRWxlbWVudC50ZXh0Q29udGVudDtcbiAgfTtcblxuICAvKipcbiAgICogRXNjYXBlIG1hcmt1cCBzbyBpdCBjYW4gYmUgZGlzcGxheWVkIHJhdGhlciB0aGFuIHJlbmRlcmVkXG4gICAqIEBwYXJhbSAge1N0cmluZ30gaHRtbCBtYXJrdXBcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgIGVzY2FwZWQgaHRtbFxuICAgKi9cbiAgdXRpbHMuZXNjYXBlSHRtbCA9IGZ1bmN0aW9uKGh0bWwpIHtcbiAgICBsZXQgZXNjYXBlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgZXNjYXBlRWxlbWVudC50ZXh0Q29udGVudCA9IGh0bWw7XG4gICAgcmV0dXJuIGVzY2FwZUVsZW1lbnQuaW5uZXJIVE1MO1xuICB9O1xuXG4gIC8vIEVzY2FwZSBhbiBhdHRyaWJ1dGVcbiAgdXRpbHMuZXNjYXBlQXR0ciA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGxldCBtYXRjaCA9IHtcbiAgICAgICdcIic6ICcmcXVvdDsnLFxuICAgICAgJyYnOiAnJmFtcDsnLFxuICAgICAgJzwnOiAnJmx0OycsXG4gICAgICAnPic6ICcmZ3Q7J1xuICAgIH07XG5cbiAgICBjb25zdCByZXBsYWNlVGFnID0gdGFnID0+IG1hdGNoW3RhZ10gfHwgdGFnO1xuXG4gICAgcmV0dXJuICh0eXBlb2Ygc3RyID09PSAnc3RyaW5nJykgPyBzdHIucmVwbGFjZSgvW1wiJjw+XS9nLCByZXBsYWNlVGFnKSA6IHN0cjtcbiAgfTtcblxuICAvLyBFc2NhcGUgYXR0cmlidXRlc1xuICB1dGlscy5lc2NhcGVBdHRycyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgZm9yIChsZXQgYXR0ciBpbiBhdHRycykge1xuICAgICAgaWYgKGF0dHJzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICAgIGF0dHJzW2F0dHJdID0gdXRpbHMuZXNjYXBlQXR0cihhdHRyc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJzO1xuICB9O1xuXG4gIC8vIGZvckVhY2ggdGhhdCBjYW4gYmUgdXNlZCBvbiBub2RlTGlzdFxuICB1dGlscy5mb3JFYWNoID0gZnVuY3Rpb24oYXJyYXksIGNhbGxiYWNrLCBzY29wZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwoc2NvcGUsIGksIGFycmF5W2ldKTsgLy8gcGFzc2VzIGJhY2sgc3R1ZmYgd2UgbmVlZFxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSBhbiBhcnJheSBvZiBlbGVtZW50c1xuICAgKiBAcGFyYW0gIHtBcnJheX0gYXJyYXkgIGFycmF5IHdpdGggcG9zc2libGUgZHVwbGljYXRlc1xuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgIGFycmF5IHdpdGggb25seSB1bmlxdWUgdmFsdWVzXG4gICAqL1xuICB1dGlscy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5maWx0ZXIoKGVsZW0sIHBvcywgYXJyKSA9PiB7XG4gICAgICByZXR1cm4gYXJyLmluZGV4T2YoZWxlbSkgPT09IHBvcztcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gYW4gYXJyYXlcbiAgICogQHBhcmFtICB7QXJyYXl9IGFyclxuICAgKiBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAgICovXG4gIHV0aWxzLnJlbW92ZSA9ICh2YWwsIGFycikgPT4ge1xuICAgIGxldCBpbmRleCA9IGFyci5pbmRleE9mKHZhbCk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuXG4gIHV0aWxzLm1ha2VMYWJlbCA9IGZpZWxkRGF0YSA9PiB7XG4gICAgbGV0IHtsYWJlbCA9ICcnLCBkZXNjcmlwdGlvbiA9ICcnLCAuLi5hdHRyc30gPSBmaWVsZERhdGE7XG4gICAgbGV0IGxhYmVsVGV4dCA9IHV0aWxzLnBhcnNlZEh0bWwobGFiZWwpO1xuICAgIGxldCBsYWJlbENvbnRlbnRzID0gW2xhYmVsVGV4dF07XG5cbiAgICBpZiAoYXR0cnMucmVxdWlyZWQpIHtcbiAgICAgIGxhYmVsQ29udGVudHMucHVzaChtKCdzcGFuJywgJyAqJywge2NsYXNzTmFtZTogJ2ZiLXJlcXVpcmVkJ30pKTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cnMudHlwZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgICBsYWJlbENvbnRlbnRzLnB1c2gobSgnc3BhbicsICc/Jywge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3Rvb2x0aXAtZWxlbWVudCcsXG4gICAgICAgICAgdG9vbHRpcDogZGVzY3JpcHRpb25cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsYWJlbEF0dHJzID0ge1xuICAgICAgY2xhc3NOYW1lOiBgZmItJHthdHRycy50eXBlfS1sYWJlbGBcbiAgICB9O1xuXG4gICAgaWYgKGF0dHJzLmlkKSB7XG4gICAgICBsYWJlbEF0dHJzLmZvciA9IGF0dHJzLmlkO1xuICAgIH1cblxuICAgIHJldHVybiBtKCdsYWJlbCcsIGxhYmVsQ29udGVudHMsIGxhYmVsQXR0cnMpO1xuICB9O1xuXG4gIHV0aWxzLnRlbXBsYXRlTWFwID0gdHlwZSA9PiB7XG4gICAgbGV0IHRlbXBsYXRlO1xuICAgIGxldCB0ZW1wbGF0ZXMgPSB1dGlscy50ZW1wbGF0ZXM7XG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHRlbXBsYXRlcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgICBpZih1dGlscy5pbkFycmF5KHR5cGUsIGtleSkpIHtcbiAgICAgICAgICB0ZW1wbGF0ZSA9IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IGtleSkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgdXRpbHMuYXV0b2NvbXBsZXRlVGVtcGxhdGUgPSBmaWVsZERhdGEgPT4ge1xuICAgIGxldCB7dmFsdWVzLCB0eXBlLCAuLi5kYXRhfSA9IGZpZWxkRGF0YTtcbiAgICBjb25zdCBrZXlib2FyZE5hdiA9IChlKSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gZS50YXJnZXQubmV4dFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICBsZXQgYWN0aXZlT3B0aW9uID0gbGlzdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhY3RpdmUtb3B0aW9uJylbMF07XG4gICAgICBjb25zdCBrZXlDb2RlTWFwVmFscyA9IFtcbiAgICAgICAgLy8gdXBcbiAgICAgICAgWzM4LCAoKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbi5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZS1vcHRpb24nKTtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uID0gYWN0aXZlT3B0aW9uLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZS1vcHRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1dLFxuICAgICAgICAvLyBkb3duXG4gICAgICAgIFs0MCwgKCkgPT4ge1xuICAgICAgICAgIGlmIChhY3RpdmVPcHRpb24pIHtcbiAgICAgICAgICAgIGlmIChhY3RpdmVPcHRpb24ubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZS1vcHRpb24nKTtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uID0gYWN0aXZlT3B0aW9uLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlLW9wdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb24gPSBsaXN0LmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlLW9wdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfV0sXG4gICAgICAgIFsxMywgKCkgPT4ge1xuICAgICAgICAgIGlmIChhY3RpdmVPcHRpb24pIHtcbiAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gYWN0aXZlT3B0aW9uLmlubmVySFRNTDtcbiAgICAgICAgICAgIGlmIChsaXN0LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICBsaXN0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGlzdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfV1cbiAgICAgIF07XG4gICAgICBsZXQga2V5Q29kZU1hcCA9IG5ldyBNYXAoa2V5Q29kZU1hcFZhbHMpO1xuXG4gICAgICBsZXQgZGlyZWN0aW9uID0ga2V5Q29kZU1hcC5nZXQoZS5rZXlDb2RlKTtcbiAgICAgIGlmKCFkaXJlY3Rpb24pIHtcbiAgICAgICAgZGlyZWN0aW9uID0gKCkgPT4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaXJlY3Rpb24oKTtcbiAgICB9O1xuICAgIGNvbnN0IGZhdXhFdmVudHMgPSB7XG4gICAgICBmb2N1czogZXZ0ID0+IHtcbiAgICAgICAgbGV0IGxpc3QgPSBldnQudGFyZ2V0Lm5leHRTaWJsaW5nLm5leHRTaWJsaW5nO1xuICAgICAgICBldnQudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlib2FyZE5hdik7XG4gICAgICAgIGxpc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGxpc3Quc3R5bGUud2lkdGggPSBsaXN0LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xuICAgICAgfSxcbiAgICAgIGJsdXI6IGV2dCA9PiB7XG4gICAgICAgIGV2dC50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWJvYXJkTmF2KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZXZ0LnRhcmdldC5uZXh0U2libGluZy5uZXh0U2libGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9LCAyMDApO1xuICAgICAgfSxcbiAgICAgIGlucHV0OiAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBldnQudGFyZ2V0Lm5leHRTaWJsaW5nLm5leHRTaWJsaW5nO1xuICAgICAgICBmaWx0ZXIobGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpLCBldnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgaWYgKCFldnQudGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgbGlzdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGxldCBmYXV4QXR0cnMgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhLFxuICAgICAge1xuICAgICAgICBpZDogYCR7ZGF0YS5pZH0taW5wdXRgLFxuICAgICAgICBldmVudHM6IGZhdXhFdmVudHNcbiAgICAgIH0pO1xuICAgIGxldCBoaWRkZW5BdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEsIHt0eXBlOiAnaGlkZGVuJ30pO1xuICAgIGRlbGV0ZSBmYXV4QXR0cnMubmFtZTtcbiAgICBjb25zdCBmaWVsZCA9IFtcbiAgICAgIG0oJ2lucHV0JywgbnVsbCwgZmF1eEF0dHJzKSxcbiAgICAgIG0oJ2lucHV0JywgbnVsbCwgaGlkZGVuQXR0cnMpXG4gICAgXTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB2YWx1ZXMubWFwKG9wdGlvbkRhdGEgPT4ge1xuICAgICAgbGV0IGxhYmVsID0gb3B0aW9uRGF0YS5sYWJlbDtcbiAgICAgIGxldCBjb25maWcgPSB7XG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrOiBldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGV2dC50YXJnZXQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGlzdC5wcmV2aW91c1NpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgZmllbGQudmFsdWUgPSBvcHRpb25EYXRhLmxhYmVsO1xuICAgICAgICAgICAgZmllbGQucHJldmlvdXNTaWJsaW5nLnZhbHVlID0gb3B0aW9uRGF0YS52YWx1ZTtcbiAgICAgICAgICAgIGxpc3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiBvcHRpb25EYXRhLnZhbHVlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG0oJ2xpJywgbGFiZWwsIGNvbmZpZyk7XG4gICAgfSk7XG5cbiAgICBmaWVsZC5wdXNoKG0oJ3VsJywgb3B0aW9ucyxcbiAgICAgIHtpZDogYCR7ZGF0YS5pZH0tbGlzdGAsIGNsYXNzTmFtZTogYGZiLSR7dHlwZX0tbGlzdGB9KSk7XG5cbiAgICBjb25zdCBvblJlbmRlciA9IChldnQpID0+IHtcblxuICAgIH07XG5cbiAgICByZXR1cm4ge2ZpZWxkLCBvblJlbmRlcn07XG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIERPTSBlbGVtZW50cyBmb3Igc2VsZWN0LCBjaGVja2JveC1ncm91cCBhbmQgcmFkaW8tZ3JvdXAuXG4gICAqIEBwYXJhbSAge09iamVjdH0gZmllbGREYXRhXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgIERPTSBlbGVtZW50c1xuICAgKi9cbiAgdXRpbHMuc2VsZWN0VGVtcGxhdGUgPSAoZmllbGREYXRhLCBpc1ByZXZpZXcpID0+IHtcbiAgICBsZXQgb3B0aW9ucyA9IFtdO1xuICAgIGxldCB7dmFsdWVzLCB0eXBlLCBpbmxpbmUsIG90aGVyLCB0b2dnbGUsIC4uLmRhdGF9ID0gZmllbGREYXRhO1xuICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhkYXRhLCBpc1ByZXZpZXcpO1xuICAgIGxldCBvcHRpb25UeXBlID0gdHlwZS5yZXBsYWNlKCctZ3JvdXAnLCAnJyk7XG4gICAgbGV0IGlzU2VsZWN0ID0gdHlwZSA9PT0gJ3NlbGVjdCc7XG5cbiAgICBpZiAodmFsdWVzKSB7XG4gICAgICBpZiAoYXR0cnMucGxhY2Vob2xkZXIgJiYgaXNTZWxlY3QpIHtcbiAgICAgICAgb3B0aW9ucy5wdXNoKG0oJ29wdGlvbicsIGF0dHJzLnBsYWNlaG9sZGVyLCB7XG4gICAgICAgICAgZGlzYWJsZWQ6IG51bGwsXG4gICAgICAgICAgc2VsZWN0ZWQ6IG51bGxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQge2xhYmVsID0gJycsIC4uLm9wdGlvbkF0dHJzfSA9IHZhbHVlc1tpXTtcblxuICAgICAgICBvcHRpb25BdHRycy5pZCA9IGAke2F0dHJzLmlkfS0ke2l9YDtcbiAgICAgICAgaWYgKCFvcHRpb25BdHRycy5zZWxlY3RlZCB8fCBhdHRycy5wbGFjZWhvbGRlcikge1xuICAgICAgICAgIGRlbGV0ZSBvcHRpb25BdHRycy5zZWxlY3RlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1NlbGVjdCkge1xuICAgICAgICAgIGxldCBvID0gbSgnb3B0aW9uJywgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGFiZWwpLCBvcHRpb25BdHRycyk7XG4gICAgICAgICAgb3B0aW9ucy5wdXNoKG8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB3cmFwcGVyQ2xhc3MgPSBvcHRpb25UeXBlO1xuICAgICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IGBmYi0ke29wdGlvblR5cGV9LWlubGluZWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbkF0dHJzLnR5cGUgPSBvcHRpb25UeXBlO1xuICAgICAgICAgIGlmIChvcHRpb25BdHRycy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgb3B0aW9uQXR0cnMuY2hlY2tlZCA9ICdjaGVja2VkJztcbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25BdHRycy5zZWxlY3RlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGlucHV0ID0gbSgnaW5wdXQnLCBudWxsLCBPYmplY3QuYXNzaWduKHt9LCBhdHRycywgb3B0aW9uQXR0cnMpKTtcbiAgICAgICAgICBsZXQgbGFiZWxBdHRycyA9IHtmb3I6IG9wdGlvbkF0dHJzLmlkfTtcbiAgICAgICAgICBsZXQgbGFiZWxDb250ZW50ID0gW2lucHV0LCBsYWJlbF07XG4gICAgICAgICAgaWYgKHRvZ2dsZSkge1xuICAgICAgICAgICAgbGV0IGtjVG9nZ2xlID0gbSgnc3BhbicpO1xuICAgICAgICAgICAgbGFiZWxDb250ZW50ID0gW2lucHV0LCBrY1RvZ2dsZSwgbGFiZWxdO1xuICAgICAgICAgICAgbGFiZWxBdHRycy5jbGFzc05hbWUgPSAna2MtdG9nZ2xlJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgaW5wdXRMYWJlbCA9IG0oJ2xhYmVsJywgbGFiZWxDb250ZW50LCBsYWJlbEF0dHJzKTtcbiAgICAgICAgICBsZXQgd3JhcHBlciA9IG0oJ2RpdicsIGlucHV0TGFiZWwsIHtjbGFzc05hbWU6IHdyYXBwZXJDbGFzc30pO1xuICAgICAgICAgIG9wdGlvbnMucHVzaCh3cmFwcGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzU2VsZWN0ICYmIG90aGVyKSB7XG4gICAgICAgIGxldCBvdGhlck9wdGlvbkF0dHJzID0ge1xuICAgICAgICAgIGlkOiBgJHthdHRycy5pZH0tb3RoZXJgLFxuICAgICAgICAgIGNsYXNzTmFtZTogYCR7YXR0cnMuY2xhc3NOYW1lfSBvdGhlci1vcHRpb25gLFxuICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgY2xpY2s6ICgpID0+IHV0aWxzLm90aGVyT3B0aW9uQ0Iob3RoZXJPcHRpb25BdHRycy5pZClcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIGxldCBsYWJlbCA9IG1pMThuLmN1cnJlbnQub3RoZXI7XG4gICAgICAgIGxldCB3cmFwcGVyQ2xhc3MgPSBvcHRpb25UeXBlO1xuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgd3JhcHBlckNsYXNzICs9ICctaW5saW5lJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25BdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEsIG90aGVyT3B0aW9uQXR0cnMpO1xuICAgICAgICBvcHRpb25BdHRycy50eXBlID0gb3B0aW9uVHlwZTtcblxuICAgICAgICBsZXQgb3RoZXJWYWxBdHRycyA9IHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgbmFtZTogZGF0YS5uYW1lLFxuICAgICAgICAgIGlkOiBgJHtvdGhlck9wdGlvbkF0dHJzLmlkfS12YWx1ZWAsXG4gICAgICAgICAgY2xhc3NOYW1lOiAnb3RoZXItdmFsJ1xuICAgICAgICB9O1xuICAgICAgICBsZXQgb3RoZXJJbnB1dHMgPSBbXG4gICAgICAgICAgbSgnaW5wdXQnLCBudWxsLCBvcHRpb25BdHRycyksXG4gICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ090aGVyJyksXG4gICAgICAgICAgbSgnaW5wdXQnLCBudWxsLCBvdGhlclZhbEF0dHJzKVxuICAgICAgICBdO1xuICAgICAgICBsZXQgaW5wdXRMYWJlbCA9IG0oJ2xhYmVsJywgb3RoZXJJbnB1dHMsIHtmb3I6IG9wdGlvbkF0dHJzLmlkfSk7XG4gICAgICAgIGxldCB3cmFwcGVyID0gbSgnZGl2JywgaW5wdXRMYWJlbCwge2NsYXNzTmFtZTogd3JhcHBlckNsYXNzfSk7XG4gICAgICAgIG9wdGlvbnMucHVzaCh3cmFwcGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGVtcGxhdGU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHRlbXBsYXRlID0gbShvcHRpb25UeXBlLCBvcHRpb25zLCBkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVtcGxhdGUgPSBtKCdkaXYnLCBvcHRpb25zLCB7Y2xhc3NOYW1lOiB0eXBlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIHV0aWxzLmRlZmF1bHRGaWVsZCA9IGZpZWxkRGF0YSA9PiB7XG4gICAgbGV0IHtsYWJlbCwgZGVzY3JpcHRpb24sIHN1YnR5cGUsIHR5cGUsIGlkLCBpc1ByZXZpZXcsIC4uLmRhdGF9ID0gZmllbGREYXRhO1xuICAgIGlmIChpZCkge1xuICAgICAgaWYgKGlzUHJldmlldykge1xuICAgICAgICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgICAgICAgZGF0YS5uYW1lID0gZGF0YS5uYW1lICsgJy1wcmV2aWV3JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhLm5hbWUgPSB1dGlscy5uYW1lQXR0cihmaWVsZERhdGEpICsgJy1wcmV2aWV3JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGF0YS5pZCA9IGRhdGEubmFtZTtcbiAgICB9XG4gICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICBkYXRhLnRpdGxlID0gZGVzY3JpcHRpb247XG4gICAgfVxuICAgIGlmIChzdWJ0eXBlKSB7XG4gICAgICB0eXBlID0gc3VidHlwZTtcbiAgICB9XG5cbiAgICBsZXQgZmllbGQgPSB7XG4gICAgICBmaWVsZDogbSh0eXBlLCB1dGlscy5wYXJzZWRIdG1sKGxhYmVsKSwgZGF0YSksXG4gICAgICBvblJlbmRlcjogdXRpbHMubm9vcFxuICAgIH07XG5cbiAgICByZXR1cm4gKCkgPT4gZmllbGQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIExvYWRzIGFuIGFycmF5IG9mIHNjcmlwdHMgdXNpbmcgalF1ZXJ5J3MgYGdldFNjcmlwdGBcbiAgICogQHBhcmFtICB7QXJyYXl8U3RyaW5nfSAgc2NyaXB0U2NyICAgIHNjcmlwdHNcbiAgICogQHBhcmFtICB7U3RyaW5nfSBwYXRoICAgb3B0aW9uYWwgdG8gbG9hZCBmb3JtXG4gICAqIEByZXR1cm4ge1Byb21pc2V9ICAgICAgIGEgcHJvbWlzZVxuICAgKi9cbiAgdXRpbHMuZ2V0U2NyaXB0cyA9IChzY3JpcHRTY3IsIHBhdGgpID0+IHtcbiAgICBjb25zdCAkID0galF1ZXJ5O1xuICAgIGxldCBfYXJyID0gW107XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NyaXB0U2NyKSkge1xuICAgICAgc2NyaXB0U2NyID0gW3NjcmlwdFNjcl07XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc0NhY2hlZChzY3JpcHRTY3IpKSB7XG4gICAgICBfYXJyID0gJC5tYXAoc2NyaXB0U2NyLCBzcmMgPT4ge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgICAgICBkYXRhVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgdXJsOiAocGF0aCB8fCAnJykgKyBzcmNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuICQuYWpheChvcHRpb25zKS5kb25lKCgpID0+IHdpbmRvdy5mYkxvYWRlZC5qcy5wdXNoKHNyYykpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2Fyci5wdXNoKCQuRGVmZXJyZWQoIGRlZmVycmVkID0+ICQoIGRlZmVycmVkLnJlc29sdmUgKSkpO1xuXG4gICAgcmV0dXJuICQud2hlbiguLi5fYXJyKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHJlbW90ZSByZXNvdXJjZSBpcyBhbHJlYWR5IGxvYWRlZFxuICAgKiBAcGFyYW0gIHtTdHJpbmd8QXJyYXl9IHNyYyAgdXJsIG9mIHJlbW90ZSBzY3JpcHQgb3IgY3NzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gICAgICAgdHlwZSAgICAgICAnanMnIG9yICdjc3MnXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgaXNDYWNoZWRcbiAgICovXG4gIHV0aWxzLmlzQ2FjaGVkID0gKHNyYywgdHlwZSA9ICdqcycpID0+IHtcbiAgICBsZXQgaXNDYWNoZWQgPSBmYWxzZTtcbiAgICBjb25zdCBjYWNoZSA9IHdpbmRvdy5mYkxvYWRlZFt0eXBlXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzcmMpKSB7XG4gICAgICBpc0NhY2hlZCA9IHNyYy5ldmVyeShzID0+IHV0aWxzLmluQXJyYXkocywgY2FjaGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNDYWNoZWQgPSB1dGlscy5pbkFycmF5KHNyYywgY2FjaGUpO1xuICAgIH1cbiAgICByZXR1cm4gaXNDYWNoZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgc3R5bGVzaGVldHMgdG8gdGhlIGhlYWRcbiAgICogQHBhcmFtICB7QXJyYXl9IHNjcmlwdFNjclxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHBhdGhcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHV0aWxzLmdldFN0eWxlcyA9IChzY3JpcHRTY3IsIHBhdGgpID0+IHtcbiAgICBpZiAodXRpbHMuaXNDYWNoZWQoc2NyaXB0U2NyLCAnY3NzJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXBwZW5kU3R5bGUgPSAoaHJlZikgPT4ge1xuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgIGxpbmsudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgIGxpbmsuaHJlZiA9IGhyZWY7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgd2luZG93LmZiTG9hZGVkLmNzcy5wdXNoKGhyZWYpO1xuICAgIH07XG4gICAgc2NyaXB0U2NyLmZvckVhY2goc3JjID0+IGFwcGVuZFN0eWxlKChwYXRoIHx8ICcnKSArIHNyYykpO1xuICB9O1xuXG4gIHV0aWxzLmxvbmdUZXh0VGVtcGxhdGUgPSBkYXRhID0+IHtcbiAgICBsZXQge3ZhbHVlID0gJycsIC4uLmF0dHJzfSA9IGRhdGE7XG4gICAgbGV0IHRlbXBsYXRlID0ge1xuICAgICAgZmllbGQ6IG0oJ3RleHRhcmVhJywgdXRpbHMucGFyc2VkSHRtbCh2YWx1ZSksIGF0dHJzKVxuICAgIH07XG4gICAgbGV0IGVkaXRvcnMgPSB7XG4gICAgICB0aW55bWNlOiB7XG4gICAgICAgIGpzOiBbJy8vY2RuLnRpbnltY2UuY29tLzQvdGlueW1jZS5taW4uanMnXSxcbiAgICAgICAgb25SZW5kZXI6IGV2dCA9PiB7XG4gICAgICAgICAgaWYgKHdpbmRvdy50aW55bWNlLmVkaXRvcnNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgIHdpbmRvdy50aW55bWNlLmVkaXRvcnNbZGF0YS5pZF0ucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdpbmRvdy50aW55bWNlLmluaXQoe1xuICAgICAgICAgICAgdGFyZ2V0OiB0ZW1wbGF0ZS5maWVsZCxcbiAgICAgICAgICAgIGhlaWdodDogMjUwLFxuICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAnYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3InLFxuICAgICAgICAgICAgICAnc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuJyxcbiAgICAgICAgICAgICAgJ2luc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIGNvbnRleHRtZW51IHBhc3RlIGNvZGUnXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdG9vbGJhcjogJ2luc2VydGZpbGUgdW5kbyByZWRvIHwgc3R5bGVzZWxlY3QgfCBib2xkIGl0YWxpYyB8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IGFsaWduanVzdGlmeSB8IGJ1bGxpc3QgbnVtbGlzdCBvdXRkZW50IGluZGVudCB8IGxpbmsgaW1hZ2UnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBxdWlsbDoge1xuICAgICAgICBqczogWycvL2Nkbi5xdWlsbGpzLmNvbS8xLjEuMy9xdWlsbC5qcyddLFxuICAgICAgICBjc3M6IFsnLy9jZG4ucXVpbGxqcy5jb20vMS4xLjMvcXVpbGwuc25vdy5jc3MnXSxcbiAgICAgICAgb25SZW5kZXI6IGV2dCA9PiB7XG4gICAgICAgICAgY29uc3QgRGVsdGEgPSB3aW5kb3cuUXVpbGwuaW1wb3J0KCdkZWx0YScpO1xuICAgICAgICAgIHdpbmRvdy5mYkVkaXRvcnMucXVpbGxbZGF0YS5pZF0gPSB7fTtcbiAgICAgICAgICBsZXQgZWRpdG9yID0gd2luZG93LmZiRWRpdG9ycy5xdWlsbFtkYXRhLmlkXTtcbiAgICAgICAgICBlZGl0b3IuaW5zdGFuY2UgPSBuZXcgd2luZG93LlF1aWxsKHRlbXBsYXRlLmZpZWxkLCB7XG4gICAgICAgICAgICBtb2R1bGVzOiB7XG4gICAgICAgICAgICAgIHRvb2xiYXI6IFtcbiAgICAgICAgICAgICAgICBbeydoZWFkZXInOiBbMSwgMiwgZmFsc2VdfV0sXG4gICAgICAgICAgICAgICAgWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnXSxcbiAgICAgICAgICAgICAgICBbJ2NvZGUtYmxvY2snXVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGF0dHJzLnBsYWNlaG9sZGVyIHx8ICcnLFxuICAgICAgICAgICAgdGhlbWU6ICdzbm93J1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVkaXRvci5kYXRhID0gbmV3IERlbHRhKCk7XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBlZGl0b3IuaW5zdGFuY2Uuc2V0Q29udGVudHMod2luZG93LkpTT04ucGFyc2UodXRpbHMucGFyc2VkSHRtbCh2YWx1ZSkpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdG9yLmluc3RhbmNlLm9uKCd0ZXh0LWNoYW5nZScsIGZ1bmN0aW9uKGRlbHRhKSB7XG4gICAgICAgICAgICBlZGl0b3IuZGF0YSA9IGVkaXRvci5kYXRhLmNvbXBvc2UoZGVsdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChkYXRhLnR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICAgIHRlbXBsYXRlLm9uUmVuZGVyID0gZWRpdG9yc1tkYXRhLnR5cGVdLm9uUmVuZGVyO1xuICAgIH1cbiAgICBpZiAoZGF0YS50eXBlID09PSAncXVpbGwnKSB7XG4gICAgICB0ZW1wbGF0ZS5maWVsZCA9IG0oJ2RpdicsIG51bGwsIGF0dHJzKTtcbiAgICB9XG5cbiAgICBjb25zdCBvblJlbmRlciA9ICgpID0+IHtcbiAgICAgIGlmIChlZGl0b3JzW2RhdGEudHlwZV0pIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZmllbGRSZW5kZXJlZCcsIG9uUmVuZGVyKTtcblxuICAgICAgICBpZiAoZWRpdG9yc1tkYXRhLnR5cGVdLmNzcykge1xuICAgICAgICAgIHV0aWxzLmdldFN0eWxlcyhlZGl0b3JzW2RhdGEudHlwZV0uY3NzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWRpdG9yc1tkYXRhLnR5cGVdLmpzICYmICF1dGlscy5pc0NhY2hlZChlZGl0b3JzW2RhdGEudHlwZV0uanMpKSB7XG4gICAgICAgICAgdXRpbHMuZ2V0U2NyaXB0cyhlZGl0b3JzW2RhdGEudHlwZV0uanMpLmRvbmUodGVtcGxhdGUub25SZW5kZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRlbXBsYXRlLm9uUmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtmaWVsZDogdGVtcGxhdGUuZmllbGQsIG9uUmVuZGVyfTtcbiAgfTtcblxuICB1dGlscy50ZW1wbGF0ZXMgPSBbXG4gICAgWydhdXRvY29tcGxldGUnLFxuICAgICAgZmllbGREYXRhID0+IHtcbiAgICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhmaWVsZERhdGEpO1xuICAgICAgICBsZXQgZmllbGRMYWJlbCA9IHV0aWxzLm1ha2VMYWJlbChmaWVsZERhdGEpO1xuICAgICAgICBsZXQgYXV0b2NvbXBsZXRlID0gdXRpbHMuYXV0b2NvbXBsZXRlVGVtcGxhdGUoYXR0cnMpO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSB7XG4gICAgICAgICAgZmllbGQ6IFtmaWVsZExhYmVsLCBhdXRvY29tcGxldGUuZmllbGRdLFxuICAgICAgICAgIG9uUmVuZGVyOiBhdXRvY29tcGxldGUub25SZW5kZXJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgICAgfV0sXG4gICAgW2RlZmF1bHRTdWJ0eXBlcy50ZXh0LmNvbmNhdChbJ251bWJlcicsICdmaWxlJywgJ2RhdGUnXSksXG4gICAgICBmaWVsZERhdGEgPT4ge1xuICAgICAgICBsZXQgYXR0cnMgPSB1dGlscy5wcm9jZXNzRmllbGREYXRhQXR0cnMoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IGZpZWxkTGFiZWwgPSB1dGlscy5tYWtlTGFiZWwoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0ge1xuICAgICAgICAgIGZpZWxkOiBbZmllbGRMYWJlbCwgbSgnaW5wdXQnLCBudWxsLCBhdHRycyldLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XSxcbiAgICBbWydwYXJhZ3JhcGgnXS5jb25jYXQoZGVmYXVsdFN1YnR5cGVzLnBhcmFncmFwaCksXG4gICAgICBmaWVsZERhdGEgPT4ge1xuICAgICAgICBsZXQgYXR0cnMgPSB1dGlscy5wcm9jZXNzRmllbGREYXRhQXR0cnMoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0ge1xuICAgICAgICAgIGZpZWxkOiBbbShmaWVsZERhdGEudHlwZSwgdXRpbHMucGFyc2VkSHRtbChmaWVsZERhdGEubGFiZWwpLCBhdHRycyldLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XSxcbiAgICBbZGVmYXVsdFN1YnR5cGVzLmJ1dHRvbixcbiAgICAgIGZpZWxkRGF0YSA9PiB7XG4gICAgICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhmaWVsZERhdGEpO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSB7XG4gICAgICAgICAgZmllbGQ6IG0oJ2J1dHRvbicsIGZpZWxkRGF0YS5sYWJlbCwgYXR0cnMpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XSxcbiAgICBbWydzZWxlY3QnLCAnY2hlY2tib3gtZ3JvdXAnLCAncmFkaW8tZ3JvdXAnLCAnY2hlY2tib3gnXSxcbiAgICAgIGZpZWxkRGF0YSA9PiB7XG4gICAgICAgIGxldCBmaWVsZExhYmVsID0gdXRpbHMubWFrZUxhYmVsKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCBmaWVsZCA9IHV0aWxzLnNlbGVjdFRlbXBsYXRlKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHtcbiAgICAgICAgICBmaWVsZDogW2ZpZWxkTGFiZWwsIGZpZWxkXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XSxcbiAgICBbWyd0ZXh0YXJlYScsICd0aW55bWNlJywgJ3F1aWxsJ10sXG4gICAgICBmaWVsZERhdGEgPT4ge1xuICAgICAgICBsZXQgYXR0cnMgPSB1dGlscy5wcm9jZXNzRmllbGREYXRhQXR0cnMoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IGZpZWxkID0gdXRpbHMubG9uZ1RleHRUZW1wbGF0ZShhdHRycyk7XG4gICAgICAgIGxldCBmaWVsZExhYmVsID0gdXRpbHMubWFrZUxhYmVsKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHtcbiAgICAgICAgICBmaWVsZDogW2ZpZWxkTGFiZWwsIGZpZWxkLmZpZWxkXSxcbiAgICAgICAgICBvblJlbmRlcjogZmllbGQub25SZW5kZXJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgICAgfV1cbiAgICBdO1xuXG4gIHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyA9IGZpZWxkRGF0YSA9PiB7XG4gICAgbGV0IHtcbiAgICAgIGxhYmVsLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBzdWJ0eXBlLFxuICAgICAgLi4uYXR0cnN9ID0gZmllbGREYXRhO1xuXG4gICAgaWYgKCFhdHRycy5pZCkge1xuICAgICAgYXR0cnMuaWQgPSBhdHRycy5uYW1lO1xuICAgIH1cblxuICAgIGlmIChzdWJ0eXBlKSB7XG4gICAgICBhdHRycy50eXBlID0gc3VidHlwZTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cnMubXVsdGlwbGUgfHwgYXR0cnMudHlwZSA9PT0gJ2NoZWNrYm94LWdyb3VwJykge1xuICAgICAgYXR0cnMubmFtZSA9IGF0dHJzLm5hbWUgKyAnW10nO1xuICAgIH1cblxuICAgIGlmIChhdHRycy5yZXF1aXJlZCkge1xuICAgICAgYXR0cnMucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgYXR0cnNbJ2FyaWEtcmVxdWlyZWQnXSA9ICd0cnVlJztcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG4gIH07XG5cbiAgdXRpbHMuZ2V0VGVtcGxhdGUgPSAoZmllbGREYXRhLCBpc1ByZXZpZXcgPSBmYWxzZSkgPT4ge1xuICAgIGxldCBmaWVsZDtcbiAgICBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICBpZiAoZmllbGREYXRhLm5hbWUpIHtcbiAgICAgICAgZmllbGREYXRhLm5hbWUgPSBmaWVsZERhdGEubmFtZSArICctcHJldmlldyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWVsZERhdGEubmFtZSA9IHV0aWxzLm5hbWVBdHRyKGZpZWxkRGF0YSkgKyAnLXByZXZpZXcnO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdGVtcGxhdGUgPSB1dGlscy50ZW1wbGF0ZU1hcChmaWVsZERhdGEudHlwZSk7XG5cbiAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUoZmllbGREYXRhLCBpc1ByZXZpZXcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wbGF0ZSA9IHV0aWxzLmRlZmF1bHRGaWVsZChmaWVsZERhdGEsIGlzUHJldmlldykoKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGREYXRhLnR5cGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICBsZXQgd3JhcHBlckF0dHJzID0ge307XG4gICAgICBpZiAoZmllbGREYXRhLm5hbWUpIHtcbiAgICAgICAgd3JhcHBlckF0dHJzLmNsYXNzTmFtZSA9XG4gICAgICAgIGBmYi0ke2ZpZWxkRGF0YS50eXBlfSBmb3JtLWdyb3VwIGZpZWxkLSR7ZmllbGREYXRhLm5hbWV9YDtcbiAgICAgIH1cbiAgICAgIGZpZWxkID0gdXRpbHMubWFya3VwKCdkaXYnLCB0ZW1wbGF0ZS5maWVsZCwgd3JhcHBlckF0dHJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGF0dHJzID0gdXRpbHMucHJvY2Vzc0ZpZWxkRGF0YUF0dHJzKGZpZWxkRGF0YSk7XG4gICAgICBmaWVsZCA9IHV0aWxzLm1hcmt1cCgnaW5wdXQnLCBudWxsLCBhdHRycyk7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBsYXRlLm9uUmVuZGVyKSB7XG4gICAgICBmaWVsZC5hZGRFdmVudExpc3RlbmVyKCdmaWVsZFJlbmRlcmVkJywgdGVtcGxhdGUub25SZW5kZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBmaWVsZDtcbiAgfTtcblxuLyoqXG4gKiBDYWxsYmFjayBmb3Igb3RoZXIgb3B0aW9uLlxuICogVG9nZ2xlcyB0aGUgaGlkZGVuIHRleHQgYXJlYSBmb3IgXCJvdGhlclwiIG9wdGlvbi5cbiAqIEBwYXJhbSAge1N0cmluZ30gb3RoZXJJZCBpZCBvZiB0aGUgXCJvdGhlclwiIG9wdGlvbiBpbnB1dFxuICovXG51dGlscy5vdGhlck9wdGlvbkNCID0gb3RoZXJJZCA9PiB7XG4gIGNvbnN0IG90aGVySW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdGhlcklkKTtcbiAgY29uc3Qgb3RoZXJJbnB1dFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7b3RoZXJJZH0tdmFsdWVgKTtcblxuICBpZiAob3RoZXJJbnB1dC5jaGVja2VkKSB7XG4gICAgb3RoZXJJbnB1dFZhbHVlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgfSBlbHNlIHtcbiAgICBvdGhlcklucHV0VmFsdWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxufTtcblxuLyoqXG4gKiBDYXBpdGFsaXplcyBhIHN0cmluZ1xuICogQHBhcmFtICB7U3RyaW5nfSBzdHIgdW5jYXBpdGFsaXplZCBzdHJpbmdcbiAqIEByZXR1cm4ge1N0cmluZ30gc3RyIGNhcGl0YWxpemVkIHN0cmluZ1xuICovXG51dGlscy5jYXBpdGFsaXplID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXGJcXHcvZywgZnVuY3Rpb24obSkge1xuICAgICAgcmV0dXJuIG0udG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbn07XG5cblxudXRpbHMubWVyZ2UgPSAob2JqMSwgb2JqMikgPT4ge1xuICBsZXQgbWVyZ2VkT2JqID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqMSwgb2JqMik7XG4gIGZvciAobGV0IHByb3AgaW4gb2JqMikge1xuICAgIGlmIChtZXJnZWRPYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iajJbcHJvcF0pKSB7XG4gICAgICAgIG1lcmdlZE9ialtwcm9wXSA9IEFycmF5LmlzQXJyYXkob2JqMVtwcm9wXSkgPyB1dGlscy51bmlxdWUob2JqMVtwcm9wXS5jb25jYXQob2JqMltwcm9wXSkpIDogb2JqMltwcm9wXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iajJbcHJvcF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1lcmdlZE9ialtwcm9wXSA9IHV0aWxzLm1lcmdlKG9iajFbcHJvcF0sIG9iajJbcHJvcF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VkT2JqW3Byb3BdID0gb2JqMltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9iajtcbn07XG5cbnV0aWxzLmFkZEV2ZW50TGlzdGVuZXJzID0gKGVsLCBldnRzLCBmbikgPT4ge1xuICByZXR1cm4gZXZ0cy5zcGxpdCgnICcpLmZvckVhY2goZSA9PiBlbC5hZGRFdmVudExpc3RlbmVyKGUsIGZuLCBmYWxzZSkpO1xufTtcblxuLyoqXG4gKiBGaW5kIHRoZSBjbG9zZXN0IHBhcmVudCBieSBjbGFzc1xuICogQHBhcmFtICB7T2JqZWN0fSBlbCAgRE9NIGVsZW1lbnRcbiAqIEBwYXJhbSAge1N0cmluZ30gY2xzIGNsYXNzXG4gKiBAcmV0dXJuIHtPYmplY3R9ICAgICBET00gRWxlbWVudFxuICovXG51dGlscy5jbG9zZXN0ID0gKGVsLCBjbHMpID0+IHtcbiAgbGV0IGNsYXNzTmFtZSA9IGNscy5yZXBsYWNlKCcuJywgJycpO1xuICB3aGlsZSAoKGVsID0gZWwucGFyZW50RWxlbWVudCkgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKTtcbiAgcmV0dXJuIGVsO1xufTtcblxudXRpbHMubm9vcCA9ICgpID0+IG51bGw7XG5cbnV0aWxzLmRlYm91bmNlID0gKGZ1bmMsIHdhaXQgPSAyNTAsIGltbWVkaWF0ZSA9IGZhbHNlKSA9PiB7XG4gIGxldCB0aW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgIGxldCBjb250ZXh0ID0gdGhpcztcbiAgICBsZXQgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGxldCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBtb2JpbGUgY2xhc3NcbiAqIEB0b2RvIGZpbmQgY3NzIG9ubHkgc29sdXRpb25cbiAqIEByZXR1cm4ge1N0cmluZ30gTW9iaWxlIGNsYXNzIGFkZGVkIHRvIGZvcm1CdWlsZGVyXG4gKi9cbnV0aWxzLm1vYmlsZUNsYXNzID0gKCkgPT4ge1xuICBsZXQgbW9iaWxlQ2xhc3MgPSAnJztcbiAgKGZ1bmN0aW9uKGEpIHtcbiAgICBpZiAoLyhhbmRyb2lkfGJiXFxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVxcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFxcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIGNlfHhkYXx4aWluby9pLnRlc3QoYSkgfHwgLzEyMDd8NjMxMHw2NTkwfDNnc298NHRocHw1MFsxLTZdaXw3NzBzfDgwMnN8YSB3YXxhYmFjfGFjKGVyfG9vfHNcXC0pfGFpKGtvfHJuKXxhbChhdnxjYXxjbyl8YW1vaXxhbihleHxueXx5dyl8YXB0dXxhcihjaHxnbyl8YXModGV8dXMpfGF0dHd8YXUoZGl8XFwtbXxyIHxzICl8YXZhbnxiZShja3xsbHxucSl8YmkobGJ8cmQpfGJsKGFjfGF6KXxicihlfHYpd3xidW1ifGJ3XFwtKG58dSl8YzU1XFwvfGNhcGl8Y2N3YXxjZG1cXC18Y2VsbHxjaHRtfGNsZGN8Y21kXFwtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjXFwtc3xkZXZpfGRpY2F8ZG1vYnxkbyhjfHApb3xkcygxMnxcXC1kKXxlbCg0OXxhaSl8ZW0obDJ8dWwpfGVyKGljfGswKXxlc2w4fGV6KFs0LTddMHxvc3x3YXx6ZSl8ZmV0Y3xmbHkoXFwtfF8pfGcxIHV8ZzU2MHxnZW5lfGdmXFwtNXxnXFwtbW98Z28oXFwud3xvZCl8Z3IoYWR8dW4pfGhhaWV8aGNpdHxoZFxcLShtfHB8dCl8aGVpXFwtfGhpKHB0fHRhKXxocCggaXxpcCl8aHNcXC1jfGh0KGMoXFwtfCB8X3xhfGd8cHxzfHQpfHRwKXxodShhd3x0Yyl8aVxcLSgyMHxnb3xtYSl8aTIzMHxpYWMoIHxcXC18XFwvKXxpYnJvfGlkZWF8aWcwMXxpa29tfGltMWt8aW5ub3xpcGFxfGlyaXN8amEodHx2KWF8amJyb3xqZW11fGppZ3N8a2RkaXxrZWppfGtndCggfFxcLyl8a2xvbnxrcHQgfGt3Y1xcLXxreW8oY3xrKXxsZShub3x4aSl8bGcoIGd8XFwvKGt8bHx1KXw1MHw1NHxcXC1bYS13XSl8bGlid3xseW54fG0xXFwtd3xtM2dhfG01MFxcL3xtYSh0ZXx1aXx4byl8bWMoMDF8MjF8Y2EpfG1cXC1jcnxtZShyY3xyaSl8bWkobzh8b2F8dHMpfG1tZWZ8bW8oMDF8MDJ8Yml8ZGV8ZG98dChcXC18IHxvfHYpfHp6KXxtdCg1MHxwMXx2ICl8bXdicHxteXdhfG4xMFswLTJdfG4yMFsyLTNdfG4zMCgwfDIpfG41MCgwfDJ8NSl8bjcoMCgwfDEpfDEwKXxuZSgoY3xtKVxcLXxvbnx0Znx3Znx3Z3x3dCl8bm9rKDZ8aSl8bnpwaHxvMmltfG9wKHRpfHd2KXxvcmFufG93ZzF8cDgwMHxwYW4oYXxkfHQpfHBkeGd8cGcoMTN8XFwtKFsxLThdfGMpKXxwaGlsfHBpcmV8cGwoYXl8dWMpfHBuXFwtMnxwbyhja3xydHxzZSl8cHJveHxwc2lvfHB0XFwtZ3xxYVxcLWF8cWMoMDd8MTJ8MjF8MzJ8NjB8XFwtWzItN118aVxcLSl8cXRla3xyMzgwfHI2MDB8cmFrc3xyaW05fHJvKHZlfHpvKXxzNTVcXC98c2EoZ2V8bWF8bW18bXN8bnl8dmEpfHNjKDAxfGhcXC18b298cFxcLSl8c2RrXFwvfHNlKGMoXFwtfDB8MSl8NDd8bWN8bmR8cmkpfHNnaFxcLXxzaGFyfHNpZShcXC18bSl8c2tcXC0wfHNsKDQ1fGlkKXxzbShhbHxhcnxiM3xpdHx0NSl8c28oZnR8bnkpfHNwKDAxfGhcXC18dlxcLXx2ICl8c3koMDF8bWIpfHQyKDE4fDUwKXx0NigwMHwxMHwxOCl8dGEoZ3R8bGspfHRjbFxcLXx0ZGdcXC18dGVsKGl8bSl8dGltXFwtfHRcXC1tb3x0byhwbHxzaCl8dHMoNzB8bVxcLXxtM3xtNSl8dHhcXC05fHVwKFxcLmJ8ZzF8c2kpfHV0c3R8djQwMHx2NzUwfHZlcml8dmkocmd8dGUpfHZrKDQwfDVbMC0zXXxcXC12KXx2bTQwfHZvZGF8dnVsY3x2eCg1Mnw1M3w2MHw2MXw3MHw4MHw4MXw4M3w4NXw5OCl8dzNjKFxcLXwgKXx3ZWJjfHdoaXR8d2koZyB8bmN8bncpfHdtbGJ8d29udXx4NzAwfHlhc1xcLXx5b3VyfHpldG98enRlXFwtL2kudGVzdChhLnN1YnN0cigwLCA0KSkpIHtcbiAgICAgIG1vYmlsZUNsYXNzID0gJyBmYi1tb2JpbGUnO1xuICAgIH1cbiAgfSkobmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBuYXZpZ2F0b3IudmVuZG9yIHx8IHdpbmRvdy5vcGVyYSk7XG4gIHJldHVybiBtb2JpbGVDbGFzcztcbn07XG5cbi8qKlxuICogQ29udmVydCBjb252ZXJ0cyBtZXNzeSBgY2wjc3NOYW1lc2AgaW50byB2YWxpZCBgY2xhc3MtbmFtZXNgXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ30gaHlwaGVuYXRlZCBzdHJpbmdcbiAqL1xudXRpbHMubWFrZUNsYXNzTmFtZSA9IHN0ciA9PiB7XG4gIHJldHVybiB1dGlscy5oeXBoZW5DYXNlKHN0ci5yZXBsYWNlKC9bXlxcd1xcc1xcLV0vZ2ksICcnKSk7XG59O1xuXG4vKipcbiAqIE1ha2Ugc3RyaW5ncyBzYWZlIHRvIGJlIHVzZWQgYXMgY2xhc3Nlc1xuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyIHN0cmluZyB0byBiZSBjb252ZXJ0ZWRcbiAqIEByZXR1cm4ge1N0cmluZ30gICAgIGNvbnZlcnRlciBzdHJpbmdcbiAqL1xudXRpbHMuc2FmZW5hbWUgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xccy9nLCAnLScpLnJlcGxhY2UoL1teYS16QS1aMC05XFxbXFxdXFxfLV0vZywgJycpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIFN0cmlwcyBub24tbnVtYmVycyBmcm9tIGEgbnVtYmVyIG9ubHkgaW5wdXRcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHN0ciBzdHJpbmcgd2l0aCBwb3NzaWJsZSBudW1iZXJcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgIHN0cmluZyB3aXRob3V0IG51bWJlcnNcbiAqL1xudXRpbHMuZm9yY2VOdW1iZXIgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1teMC05XS9nLCAnJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb20uanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2Zyb20uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2dldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fa2V5b2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21ldGEuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21pY3JvdGFzay5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdGFzay5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmlzLWl0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubWFwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvbWkxOG4vZGlzdC9taTE4bi5taW4uanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS1tb2R1bGUuanMiLCJub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwic3JjL2pzL2NvbmZpZy5qcyIsInNyYy9qcy9kYXRhLmpzIiwic3JjL2pzL2RvbS5qcyIsInNyYy9qcy9ldmVudHMuanMiLCJzcmMvanMvZm9ybS1idWlsZGVyLmpzIiwic3JjL2pzL2hlbHBlcnMuanMiLCJzcmMvanMvcG9seWZpbGxzLmpzIiwic3JjL2pzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7O0FDREE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7O0FDQUE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBOztBQ0ZBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU9BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBOztBQ0FBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUksT0FBSixFQUFhO0FBQ1gsV0FBSyxLQUFMLENBQVcsT0FBWCxFQUFvQixJQUFwQjtBQUNEO0FBQ0YsR0FkRDtBQWVELENBakJEOztBQW1CQTs7Ozs7QUFLQSxNQUFNLFdBQU4sR0FBb0IsWUFBTTtBQUN4QixNQUFJLGNBQWMsRUFBbEI7QUFDQSxHQUFDLFVBQVMsQ0FBVCxFQUFZO0FBQ1gsUUFBSSwyVEFBMlQsSUFBM1QsQ0FBZ1UsQ0FBaFUsS0FBc1UsMGtEQUEwa0QsSUFBMWtELENBQStrRCxFQUFFLE1BQUYsQ0FBUyxDQUFULEVBQVksQ0FBWixDQUEva0QsQ0FBMVUsRUFBMDZEO0FBQ3g2RCxvQkFBYyxZQUFkO0FBQ0Q7QUFDRixHQUpELEVBSUcsVUFBVSxTQUFWLElBQXVCLFVBQVUsTUFBakMsSUFBMkMsT0FBTyxLQUpyRDtBQUtBLFNBQU8sV0FBUDtBQUNELENBUkQ7O0FBVUE7Ozs7OztBQU1BLE1BQU0sYUFBTixHQUFzQixlQUFPO0FBQzNCLFNBQU8sTUFBTSxVQUFOLENBQWlCLElBQUksT0FBSixDQUFZLGFBQVosRUFBMkIsRUFBM0IsQ0FBakIsQ0FBUDtBQUNELENBRkQ7O0FBSUE7Ozs7OztBQU1BLE1BQU0sUUFBTixHQUFpQixlQUFPO0FBQ3RCLFNBQU8sSUFBSSxPQUFKLENBQVksS0FBWixFQUFtQixHQUFuQixFQUF3QixPQUF4QixDQUFnQyxzQkFBaEMsRUFBd0QsRUFBeEQsRUFBNEQsV0FBNUQsRUFBUDtBQUNELENBRkQ7O0FBSUE7Ozs7OztBQU1BLE1BQU0sV0FBTixHQUFvQixlQUFPO0FBQ3pCLFNBQU8sSUFBSSxPQUFKLENBQVksU0FBWixFQUF1QixFQUF2QixDQUFQO0FBQ0QsQ0FGRDs7a0JBSWUsSyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9nZXQtaXRlcmF0b3JcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vaXMtaXRlcmFibGVcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vbWFwXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ25cIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5c1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9wcm9taXNlXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbFwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3JcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9wcm9taXNlID0gcmVxdWlyZShcIi4uL2NvcmUtanMvcHJvbWlzZVwiKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2VuID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gbmV3IF9wcm9taXNlMi5kZWZhdWx0KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIHN0ZXAoa2V5LCBhcmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgICAgICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHN0ZXAoXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBzdGVwKFwidGhyb3dcIiwgZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RlcChcIm5leHRcIik7XG4gICAgfSk7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmaW5lUHJvcGVydHkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKG9iaiwga2V5cykge1xuICB2YXIgdGFyZ2V0ID0ge307XG5cbiAgZm9yICh2YXIgaSBpbiBvYmopIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlO1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlO1xuICAgIHRhcmdldFtpXSA9IG9ialtpXTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2lzSXRlcmFibGUyID0gcmVxdWlyZShcIi4uL2NvcmUtanMvaXMtaXRlcmFibGVcIik7XG5cbnZhciBfaXNJdGVyYWJsZTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc0l0ZXJhYmxlMik7XG5cbnZhciBfZ2V0SXRlcmF0b3IyID0gcmVxdWlyZShcIi4uL2NvcmUtanMvZ2V0LWl0ZXJhdG9yXCIpO1xuXG52YXIgX2dldEl0ZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldEl0ZXJhdG9yMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHtcbiAgICB2YXIgX2FyciA9IFtdO1xuICAgIHZhciBfbiA9IHRydWU7XG4gICAgdmFyIF9kID0gZmFsc2U7XG4gICAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIF9pID0gKDAsIF9nZXRJdGVyYXRvcjMuZGVmYXVsdCkoYXJyKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9IHRydWU7XG4gICAgICBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzSXRlcmFibGUzLmRlZmF1bHQpKE9iamVjdChhcnIpKSkge1xuICAgICAgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG4gICAgfVxuICB9O1xufSgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2Zyb20gPSByZXF1aXJlKFwiLi4vY29yZS1qcy9hcnJheS9mcm9tXCIpO1xuXG52YXIgX2Zyb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZnJvbSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycjJbaV0gPSBhcnJbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICgwLCBfZnJvbTIuZGVmYXVsdCkoYXJyKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pdGVyYXRvciA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiKTtcblxudmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7XG5cbnZhciBfc3ltYm9sID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sXCIpO1xuXG52YXIgX3N5bWJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIF9pdGVyYXRvcjIuZGVmYXVsdCA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YoX2l0ZXJhdG9yMi5kZWZhdWx0KSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lXCIpO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5mcm9tOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3InKTsiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGUnKTsiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNy5tYXAudG8tanNvbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL19jb3JlJykuTWFwOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5hc3NpZ247IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyICRPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKXtcbiAgcmV0dXJuICRPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Qua2V5czsiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL19jb3JlJykuUHJvbWlzZTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlN5bWJvbDsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL193a3MtZXh0JykuZignaXRlcmF0b3InKTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKXtcbiAgaWYoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpe1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTsiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICBpZighaXNPYmplY3QoaXQpKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTsiLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyLCBJVEVSQVRPUil7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvTGVuZ3RoICA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgdG9JbmRleCAgID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oSVNfSU5DTFVERVMpe1xuICByZXR1cm4gZnVuY3Rpb24oJHRoaXMsIGVsLCBmcm9tSW5kZXgpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoJHRoaXMpXG4gICAgICAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKVxuICAgICAgLCBpbmRleCAgPSB0b0luZGV4KGZyb21JbmRleCwgbGVuZ3RoKVxuICAgICAgLCB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgaWYoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpd2hpbGUobGVuZ3RoID4gaW5kZXgpe1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgaWYodmFsdWUgIT0gdmFsdWUpcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjdG9JbmRleCBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKWlmKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pe1xuICAgICAgaWYoT1tpbmRleF0gPT09IGVsKXJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07IiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBJT2JqZWN0ICA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgYXNjICAgICAgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihUWVBFLCAkY3JlYXRlKXtcbiAgdmFyIElTX01BUCAgICAgICAgPSBUWVBFID09IDFcbiAgICAsIElTX0ZJTFRFUiAgICAgPSBUWVBFID09IDJcbiAgICAsIElTX1NPTUUgICAgICAgPSBUWVBFID09IDNcbiAgICAsIElTX0VWRVJZICAgICAgPSBUWVBFID09IDRcbiAgICAsIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDZcbiAgICAsIE5PX0hPTEVTICAgICAgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWFxuICAgICwgY3JlYXRlICAgICAgICA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24oJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpe1xuICAgIHZhciBPICAgICAgPSB0b09iamVjdCgkdGhpcylcbiAgICAgICwgc2VsZiAgID0gSU9iamVjdChPKVxuICAgICAgLCBmICAgICAgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMylcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IDBcbiAgICAgICwgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZFxuICAgICAgLCB2YWwsIHJlcztcbiAgICBmb3IoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKWlmKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpe1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYoVFlQRSl7XG4gICAgICAgIGlmKElTX01BUClyZXN1bHRbaW5kZXhdID0gcmVzOyAgICAgICAgICAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmKHJlcylzd2l0Y2goVFlQRSl7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZihJU19FVkVSWSlyZXR1cm4gZmFsc2U7ICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59OyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgaXNBcnJheSAgPSByZXF1aXJlKCcuL19pcy1hcnJheScpXG4gICwgU1BFQ0lFUyAgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsKXtcbiAgdmFyIEM7XG4gIGlmKGlzQXJyYXkob3JpZ2luYWwpKXtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZih0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpQyA9IHVuZGVmaW5lZDtcbiAgICBpZihpc09iamVjdChDKSl7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmKEMgPT09IG51bGwpQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07IiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbCwgbGVuZ3RoKXtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07IiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKVxuICAsIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXG4gIC8vIEVTMyB3cm9uZyBoZXJlXG4gICwgQVJHID0gY29mKGZ1bmN0aW9uKCl7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24oaXQsIGtleSl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTsiLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBjcmVhdGUgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJylcbiAgLCBjdHggICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgYW5JbnN0YW5jZSAgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpXG4gICwgZGVmaW5lZCAgICAgPSByZXF1aXJlKCcuL19kZWZpbmVkJylcbiAgLCBmb3JPZiAgICAgICA9IHJlcXVpcmUoJy4vX2Zvci1vZicpXG4gICwgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpXG4gICwgc3RlcCAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKVxuICAsIHNldFNwZWNpZXMgID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKVxuICAsIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsIGZhc3RLZXkgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXlcbiAgLCBTSVpFICAgICAgICA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24odGhhdCwga2V5KXtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KSwgZW50cnk7XG4gIGlmKGluZGV4ICE9PSAnRicpcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubil7XG4gICAgaWYoZW50cnkuayA9PSBrZXkpcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpe1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbih0aGF0LCBpdGVyYWJsZSl7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZihpdGVyYWJsZSAhPSB1bmRlZmluZWQpZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCl7XG4gICAgICAgIGZvcih2YXIgdGhhdCA9IHRoaXMsIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pe1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmKGVudHJ5LnApZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24oa2V5KXtcbiAgICAgICAgdmFyIHRoYXQgID0gdGhpc1xuICAgICAgICAgICwgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZihlbnRyeSl7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uXG4gICAgICAgICAgICAsIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmKHByZXYpcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZihuZXh0KW5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYodGhhdC5fZiA9PSBlbnRyeSl0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZih0aGF0Ll9sID09IGVudHJ5KXRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qLCB0aGF0ID0gdW5kZWZpbmVkICovKXtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGlzLCBDLCAnZm9yRWFjaCcpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMylcbiAgICAgICAgICAsIGVudHJ5O1xuICAgICAgICB3aGlsZShlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2Ype1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUoZW50cnkgJiYgZW50cnkucillbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSl7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYoREVTQ1JJUFRPUlMpZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gZGVmaW5lZCh0aGlzW1NJWkVdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbih0aGF0LCBrZXksIHZhbHVlKXtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpXG4gICAgICAsIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmKGVudHJ5KXtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmKCF0aGF0Ll9mKXRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmKHByZXYpcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmKGluZGV4ICE9PSAnRicpdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24oQywgTkFNRSwgSVNfTUFQKXtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuICAgICAgdGhpcy5fdCA9IGl0ZXJhdGVkOyAgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgdGhhdCAgPSB0aGlzXG4gICAgICAgICwga2luZCAgPSB0aGF0Ll9rXG4gICAgICAgICwgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZShlbnRyeSAmJiBlbnRyeS5yKWVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZighdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKXtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZihraW5kID09ICdrZXlzJyAgKXJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycgLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKVxuICAsIGZyb20gICAgPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUpe1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCl7XG4gICAgaWYoY2xhc3NvZih0aGlzKSAhPSBOQU1FKXRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgcmV0dXJuIGZyb20odGhpcyk7XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIG1ldGEgICAgICAgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpXG4gICwgZmFpbHMgICAgICAgICAgPSByZXF1aXJlKCcuL19mYWlscycpXG4gICwgaGlkZSAgICAgICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCByZWRlZmluZUFsbCAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpXG4gICwgZm9yT2YgICAgICAgICAgPSByZXF1aXJlKCcuL19mb3Itb2YnKVxuICAsIGFuSW5zdGFuY2UgICAgID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKVxuICAsIGlzT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCBkUCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBlYWNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKVxuICAsIERFU0NSSVBUT1JTICAgID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSyl7XG4gIHZhciBCYXNlICA9IGdsb2JhbFtOQU1FXVxuICAgICwgQyAgICAgPSBCYXNlXG4gICAgLCBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCdcbiAgICAsIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZVxuICAgICwgTyAgICAgPSB7fTtcbiAgaWYoIURFU0NSSVBUT1JTIHx8IHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uKCl7XG4gICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICB9KSkpe1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBDID0gd3JhcHBlcihmdW5jdGlvbih0YXJnZXQsIGl0ZXJhYmxlKXtcbiAgICAgIGFuSW5zdGFuY2UodGFyZ2V0LCBDLCBOQU1FLCAnX2MnKTtcbiAgICAgIHRhcmdldC5fYyA9IG5ldyBCYXNlO1xuICAgICAgaWYoaXRlcmFibGUgIT0gdW5kZWZpbmVkKWZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRhcmdldFtBRERFUl0sIHRhcmdldCk7XG4gICAgfSk7XG4gICAgZWFjaCgnYWRkLGNsZWFyLGRlbGV0ZSxmb3JFYWNoLGdldCxoYXMsc2V0LGtleXMsdmFsdWVzLGVudHJpZXMsdG9KU09OJy5zcGxpdCgnLCcpLGZ1bmN0aW9uKEtFWSl7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT0gJ2FkZCcgfHwgS0VZID09ICdzZXQnO1xuICAgICAgaWYoS0VZIGluIHByb3RvICYmICEoSVNfV0VBSyAmJiBLRVkgPT0gJ2NsZWFyJykpaGlkZShDLnByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGlzLCBDLCBLRVkpO1xuICAgICAgICBpZighSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpcmV0dXJuIEtFWSA9PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGZhbHNlO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY1tLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZignc2l6ZScgaW4gcHJvdG8pZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5fYy5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GLCBPKTtcblxuICBpZighSVNfV0VBSyljb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59OyIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7dmVyc2lvbjogJzIuNC4wJ307XG5pZih0eXBlb2YgX19lID09ICdudW1iZXInKV9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWYiLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjICAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBpbmRleCwgdmFsdWUpe1xuICBpZihpbmRleCBpbiBvYmplY3QpJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07IiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgdGhhdCwgbGVuZ3RoKXtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYodGhhdCA9PT0gdW5kZWZpbmVkKXJldHVybiBmbjtcbiAgc3dpdGNoKGxlbmd0aCl7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24oYSl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKC8qIC4uLmFyZ3MgKi8pe1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTsiLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ID09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07IiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50XG4gIC8vIGluIG9sZCBJRSB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0J1xuICAsIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59OyIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpOyIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BTICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKVxuICAsIHBJRSAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIHJlc3VsdCAgICAgPSBnZXRLZXlzKGl0KVxuICAgICwgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYoZ2V0U3ltYm9scyl7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KVxuICAgICAgLCBpc0VudW0gID0gcElFLmZcbiAgICAgICwgaSAgICAgICA9IDBcbiAgICAgICwga2V5O1xuICAgIHdoaWxlKHN5bWJvbHMubGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSlyZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59OyIsInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGNvcmUgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIGN0eCAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgaGlkZSAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgc291cmNlKXtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkZcbiAgICAsIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0LkdcbiAgICAsIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlNcbiAgICAsIElTX1BST1RPICA9IHR5cGUgJiAkZXhwb3J0LlBcbiAgICAsIElTX0JJTkQgICA9IHR5cGUgJiAkZXhwb3J0LkJcbiAgICAsIElTX1dSQVAgICA9IHR5cGUgJiAkZXhwb3J0LldcbiAgICAsIGV4cG9ydHMgICA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pXG4gICAgLCBleHBQcm90byAgPSBleHBvcnRzW1BST1RPVFlQRV1cbiAgICAsIHRhcmdldCAgICA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV1cbiAgICAsIGtleSwgb3duLCBvdXQ7XG4gIGlmKElTX0dMT0JBTClzb3VyY2UgPSBuYW1lO1xuICBmb3Ioa2V5IGluIHNvdXJjZSl7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZihvd24gJiYga2V5IGluIGV4cG9ydHMpY29udGludWU7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICA6IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKVxuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG4gICAgOiBJU19XUkFQICYmIHRhcmdldFtrZXldID09IG91dCA/IChmdW5jdGlvbihDKXtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24oYSwgYiwgYyl7XG4gICAgICAgIGlmKHRoaXMgaW5zdGFuY2VvZiBDKXtcbiAgICAgICAgICBzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQztcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYoSVNfUFJPVE8pe1xuICAgICAgKGV4cG9ydHMudmlydHVhbCB8fCAoZXhwb3J0cy52aXJ0dWFsID0ge30pKVtrZXldID0gb3V0O1xuICAgICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLnByb3RvdHlwZS4lTkFNRSVcbiAgICAgIGlmKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0paGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWAgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07IiwidmFyIGN0eCAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBjYWxsICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpXG4gICwgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJylcbiAgLCBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9MZW5ndGggICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGdldEl0ZXJGbiAgID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKVxuICAsIEJSRUFLICAgICAgID0ge31cbiAgLCBSRVRVUk4gICAgICA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1Ipe1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbigpeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpXG4gICAgLCBmICAgICAgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSlcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYoaXNBcnJheUl0ZXIoaXRlckZuKSlmb3IobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgKXtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLICA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZiA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZih0eXBlb2YgX19nID09ICdudW1iZXInKV9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwga2V5KXtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59OyIsInZhciBkUCAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsiLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7Z2V0OiBmdW5jdGlvbigpeyByZXR1cm4gNzsgfX0pLmEgIT0gNztcbn0pOyIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgYXJncywgdGhhdCl7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoKGFyZ3MubGVuZ3RoKXtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTsiLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTsiLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgSVRFUkFUT1IgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59OyIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpe1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59OyIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoKGUpe1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYocmV0ICE9PSB1bmRlZmluZWQpYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIGRlc2NyaXB0b3IgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCl7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwge25leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCl9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJylcbiAgLCBoaWRlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBJdGVyYXRvcnMgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgJGl0ZXJDcmVhdGUgICAgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJylcbiAgLCBJVEVSQVRPUiAgICAgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgQlVHR1kgICAgICAgICAgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSkgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICAsIEZGX0lURVJBVE9SICAgID0gJ0BAaXRlcmF0b3InXG4gICwgS0VZUyAgICAgICAgICAgPSAna2V5cydcbiAgLCBWQUxVRVMgICAgICAgICA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCl7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uKGtpbmQpe1xuICAgIGlmKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKXJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2goa2luZCl7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyAgICAgICAgPSBOQU1FICsgJyBJdGVyYXRvcidcbiAgICAsIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFU1xuICAgICwgVkFMVUVTX0JVRyA9IGZhbHNlXG4gICAgLCBwcm90byAgICAgID0gQmFzZS5wcm90b3R5cGVcbiAgICAsICRuYXRpdmUgICAgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF1cbiAgICAsICRkZWZhdWx0ICAgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKVxuICAgICwgJGVudHJpZXMgICA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWRcbiAgICAsICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlXG4gICAgLCBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmKCRhbnlOYXRpdmUpe1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKSk7XG4gICAgaWYoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpe1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmKCFMSUJSQVJZICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSloaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKXtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZigoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSl7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSAgPSByZXR1cm5UaGlzO1xuICBpZihERUZBVUxUKXtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiAgREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiAgICBJU19TRVQgICAgID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYoRk9SQ0VEKWZvcihrZXkgaW4gbWV0aG9kcyl7XG4gICAgICBpZighKGtleSBpbiBwcm90bykpcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTsiLCJ2YXIgSVRFUkFUT1IgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbigpeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbigpeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjLCBza2lwQ2xvc2luZyl7XG4gIGlmKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKXJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyICA9IFs3XVxuICAgICAgLCBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uKCl7IHJldHVybiB7ZG9uZTogc2FmZSA9IHRydWV9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbigpeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZG9uZSwgdmFsdWUpe1xuICByZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSB7fTsiLCJ2YXIgZ2V0S2V5cyAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBlbCl7XG4gIHZhciBPICAgICAgPSB0b0lPYmplY3Qob2JqZWN0KVxuICAgICwga2V5cyAgID0gZ2V0S2V5cyhPKVxuICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobGVuZ3RoID4gaW5kZXgpaWYoT1trZXkgPSBrZXlzW2luZGV4KytdXSA9PT0gZWwpcmV0dXJuIGtleTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlOyIsInZhciBNRVRBICAgICA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJylcbiAgLCBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgaGFzICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIHNldERlc2MgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZlxuICAsIGlkICAgICAgID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uKCl7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uKGl0KXtcbiAgc2V0RGVzYyhpdCwgTUVUQSwge3ZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfX0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24oaXQsIGNyZWF0ZSl7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYoIWlzT2JqZWN0KGl0KSlyZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZighaGFzKGl0LCBNRVRBKSl7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZighaXNFeHRlbnNpYmxlKGl0KSlyZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYoIWNyZWF0ZSlyZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uKGl0LCBjcmVhdGUpe1xuICBpZighaGFzKGl0LCBNRVRBKSl7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZighaXNFeHRlbnNpYmxlKGl0KSlyZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmKCFjcmVhdGUpcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbihpdCl7XG4gIGlmKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSlzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogICAgICBNRVRBLFxuICBORUVEOiAgICAgZmFsc2UsXG4gIGZhc3RLZXk6ICBmYXN0S2V5LFxuICBnZXRXZWFrOiAgZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59OyIsInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXRcbiAgLCBPYnNlcnZlciAgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlclxuICAsIHByb2Nlc3MgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgUHJvbWlzZSAgID0gZ2xvYmFsLlByb21pc2VcbiAgLCBpc05vZGUgICAgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbigpe1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKXBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUoaGVhZCl7XG4gICAgICBmbiAgID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgaWYoaGVhZClub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZihwYXJlbnQpcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZihpc05vZGUpe1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXJcbiAgfSBlbHNlIGlmKE9ic2VydmVyKXtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZVxuICAgICAgLCBub2RlICAgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHtjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKXtcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihmbil7XG4gICAgdmFyIHRhc2sgPSB7Zm46IGZuLCBuZXh0OiB1bmRlZmluZWR9O1xuICAgIGlmKGxhc3QpbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZighaGVhZCl7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBnZXRLZXlzICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BTICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJylcbiAgLCBwSUUgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKVxuICAsIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCBJT2JqZWN0ICA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsICRhc3NpZ24gID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgdmFyIEEgPSB7fVxuICAgICwgQiA9IHt9XG4gICAgLCBTID0gU3ltYm9sKClcbiAgICAsIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbihrKXsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKXsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCAgICAgPSB0b09iamVjdCh0YXJnZXQpXG4gICAgLCBhTGVuICA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGluZGV4ID0gMVxuICAgICwgZ2V0U3ltYm9scyA9IGdPUFMuZlxuICAgICwgaXNFbnVtICAgICA9IHBJRS5mO1xuICB3aGlsZShhTGVuID4gaW5kZXgpe1xuICAgIHZhciBTICAgICAgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSlcbiAgICAgICwga2V5cyAgID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKVxuICAgICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICAgLCBqICAgICAgPSAwXG4gICAgICAsIGtleTtcbiAgICB3aGlsZShsZW5ndGggPiBqKWlmKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpVFtrZXldID0gU1trZXldO1xuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247IiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGRQcyAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJylcbiAgLCBJRV9QUk9UTyAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKVxuICAsIEVtcHR5ICAgICAgID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfVxuICAsIFBST1RPVFlQRSAgID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24oKXtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJylcbiAgICAsIGkgICAgICA9IGVudW1CdWdLZXlzLmxlbmd0aFxuICAgICwgbHQgICAgID0gJzwnXG4gICAgLCBndCAgICAgPSAnPidcbiAgICAsIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlKGktLSlkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcyl7XG4gIHZhciByZXN1bHQ7XG4gIGlmKE8gIT09IG51bGwpe1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgZFAgICAgICAgICAgICAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKXtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmKElFOF9ET01fREVGSU5FKXRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIGlmKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcyl0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZigndmFsdWUnIGluIEF0dHJpYnV0ZXMpT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTsiLCJ2YXIgZFAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBnZXRLZXlzICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKXtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzICAgPSBnZXRLZXlzKFByb3BlcnRpZXMpXG4gICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICwgaSA9IDBcbiAgICAsIFA7XG4gIHdoaWxlKGxlbmd0aCA+IGkpZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59OyIsInZhciBwSUUgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKVxuICAsIGNyZWF0ZURlc2MgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgdG9JT2JqZWN0ICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIGdPUEQgICAgICAgICAgID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCl7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICBpZihoYXMoTywgUCkpcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTsiLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgZ09QTiAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mXG4gICwgdG9TdHJpbmcgID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbihpdCl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTsiLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzOyIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIHRvT2JqZWN0ICAgID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCBJRV9QUk9UTyAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKVxuICAsIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24oTyl7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYoaGFzKE8sIElFX1BST1RPKSlyZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3Ipe1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07IiwidmFyIGhhcyAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgdG9JT2JqZWN0ICAgID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSlcbiAgLCBJRV9QUk9UTyAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBuYW1lcyl7XG4gIHZhciBPICAgICAgPSB0b0lPYmplY3Qob2JqZWN0KVxuICAgICwgaSAgICAgID0gMFxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGtleTtcbiAgZm9yKGtleSBpbiBPKWlmKGtleSAhPSBJRV9QUk9UTyloYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpaWYoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKXtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59OyIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKVxuICAsIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTyl7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59OyIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlOyIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGNvcmUgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBmYWlscyAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBleGVjKXtcbiAgdmFyIGZuICA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXVxuICAgICwgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24oKXsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihiaXRtYXAsIHZhbHVlKXtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlICA6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlICAgIDogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZSAgICAgICA6IHZhbHVlXG4gIH07XG59OyIsInZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0YXJnZXQsIHNyYywgc2FmZSl7XG4gIGZvcih2YXIga2V5IGluIHNyYyl7XG4gICAgaWYoc2FmZSAmJiB0YXJnZXRba2V5XSl0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgaGlkZSh0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9IHJldHVybiB0YXJnZXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpOyIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBkUCAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpXG4gICwgU1BFQ0lFUyAgICAgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEtFWSl7XG4gIHZhciBDID0gdHlwZW9mIGNvcmVbS0VZXSA9PSAnZnVuY3Rpb24nID8gY29yZVtLRVldIDogZ2xvYmFsW0tFWV07XG4gIGlmKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59OyIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgaGFzID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgdGFnLCBzdGF0KXtcbiAgaWYoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSlkZWYoaXQsIFRBRywge2NvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZ30pO1xufTsiLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKVxuICAsIHVpZCAgICA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihrZXkpe1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTsiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJ1xuICAsIHN0b3JlICA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB7fSk7XG59OyIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpXG4gICwgU1BFQ0lFUyAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTywgRCl7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3IsIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07IiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIGRlZmluZWQgICA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFRPX1NUUklORyl7XG4gIHJldHVybiBmdW5jdGlvbih0aGF0LCBwb3Mpe1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpXG4gICAgICAsIGkgPSB0b0ludGVnZXIocG9zKVxuICAgICAgLCBsID0gcy5sZW5ndGhcbiAgICAgICwgYSwgYjtcbiAgICBpZihpIDwgMCB8fCBpID49IGwpcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07IiwidmFyIGN0eCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgaW52b2tlICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faW52b2tlJylcbiAgLCBodG1sICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19odG1sJylcbiAgLCBjZWwgICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJylcbiAgLCBnbG9iYWwgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgc2V0VGFzayAgICAgICAgICAgID0gZ2xvYmFsLnNldEltbWVkaWF0ZVxuICAsIGNsZWFyVGFzayAgICAgICAgICA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZVxuICAsIE1lc3NhZ2VDaGFubmVsICAgICA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbFxuICAsIGNvdW50ZXIgICAgICAgICAgICA9IDBcbiAgLCBxdWV1ZSAgICAgICAgICAgICAgPSB7fVxuICAsIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnXG4gICwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24oKXtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIGlmKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSl7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYoIXNldFRhc2sgfHwgIWNsZWFyVGFzayl7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pe1xuICAgIHZhciBhcmdzID0gW10sIGkgPSAxO1xuICAgIHdoaWxlKGFyZ3VtZW50cy5sZW5ndGggPiBpKWFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uKCl7XG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpe1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZihyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcycpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmKE1lc3NhZ2VDaGFubmVsKXtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsO1xuICAgIHBvcnQgICAgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKXtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZihPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbigpe1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogICBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59OyIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtYXggICAgICAgPSBNYXRoLm1heFxuICAsIG1pbiAgICAgICA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpbmRleCwgbGVuZ3RoKXtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07IiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCAgPSBNYXRoLmNlaWxcbiAgLCBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59OyIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0JylcbiAgLCBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07IiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07IiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59OyIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIFMpe1xuICBpZighaXNPYmplY3QoaXQpKXJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpcmV0dXJuIHZhbDtcbiAgaWYodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZighUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59OyIsInZhciBpZCA9IDBcbiAgLCBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59OyIsInZhciBnbG9iYWwgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgICAgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsIHdrc0V4dCAgICAgICAgID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpXG4gICwgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKXtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSlkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7dmFsdWU6IHdrc0V4dC5mKG5hbWUpfSk7XG59OyIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpOyIsInZhciBzdG9yZSAgICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpXG4gICwgdWlkICAgICAgICA9IHJlcXVpcmUoJy4vX3VpZCcpXG4gICwgU3ltYm9sICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbFxuICAsIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSl7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlOyIsInZhciBjbGFzc29mICAgPSByZXF1aXJlKCcuL19jbGFzc29mJylcbiAgLCBJVEVSQVRPUiAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ICE9IHVuZGVmaW5lZClyZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59OyIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgZ2V0ICAgICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3IgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBpdGVyRm4gPSBnZXQoaXQpO1xuICBpZih0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIHJldHVybiBhbk9iamVjdChpdGVyRm4uY2FsbChpdCkpO1xufTsiLCJ2YXIgY2xhc3NvZiAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgSVRFUkFUT1IgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmlzSXRlcmFibGUgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBPID0gT2JqZWN0KGl0KTtcbiAgcmV0dXJuIE9bSVRFUkFUT1JdICE9PSB1bmRlZmluZWRcbiAgICB8fCAnQEBpdGVyYXRvcicgaW4gT1xuICAgIHx8IEl0ZXJhdG9ycy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKE8pKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgdG9PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIGNhbGwgICAgICAgICAgID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJylcbiAgLCBpc0FycmF5SXRlciAgICA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKVxuICAsIHRvTGVuZ3RoICAgICAgID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpXG4gICwgZ2V0SXRlckZuICAgICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uKGl0ZXIpeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLyosIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKi8pe1xuICAgIHZhciBPICAgICAgID0gdG9PYmplY3QoYXJyYXlMaWtlKVxuICAgICAgLCBDICAgICAgID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheVxuICAgICAgLCBhTGVuICAgID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgLCBtYXBmbiAgID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICAgICwgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWRcbiAgICAgICwgaW5kZXggICA9IDBcbiAgICAgICwgaXRlckZuICA9IGdldEl0ZXJGbihPKVxuICAgICAgLCBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYobWFwcGluZyltYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKXtcbiAgICAgIGZvcihpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQzsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKXtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKVxuICAsIHN0ZXAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKVxuICAsIEl0ZXJhdG9ycyAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKVxuICAsIHRvSU9iamVjdCAgICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGtpbmQgID0gdGhpcy5fa1xuICAgICwgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKXtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZihraW5kID09ICd2YWx1ZXMnKXJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTsiLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoJ01hcCcsIGZ1bmN0aW9uKGdldCl7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKXsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KXtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSl7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpOyIsIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHthc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKX0pOyIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHtkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZn0pOyIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCAka2V5cyAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uKCl7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KXtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pOyIsIiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICAgICAgPSByZXF1aXJlKCcuL19saWJyYXJ5JylcbiAgLCBnbG9iYWwgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGN0eCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgY2xhc3NvZiAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgJGV4cG9ydCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBpc09iamVjdCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGFGdW5jdGlvbiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIGFuSW5zdGFuY2UgICAgICAgICA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJylcbiAgLCBmb3JPZiAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19mb3Itb2YnKVxuICAsIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKVxuICAsIHRhc2sgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXRcbiAgLCBtaWNyb3Rhc2sgICAgICAgICAgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpXG4gICwgUFJPTUlTRSAgICAgICAgICAgID0gJ1Byb21pc2UnXG4gICwgVHlwZUVycm9yICAgICAgICAgID0gZ2xvYmFsLlR5cGVFcnJvclxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgJFByb21pc2UgICAgICAgICAgID0gZ2xvYmFsW1BST01JU0VdXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBpc05vZGUgICAgICAgICAgICAgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJ1xuICAsIGVtcHR5ICAgICAgICAgICAgICA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH1cbiAgLCBJbnRlcm5hbCwgR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSAgICAgPSAkUHJvbWlzZS5yZXNvbHZlKDEpXG4gICAgICAsIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbihleGVjKXsgZXhlYyhlbXB0eSwgZW1wdHkpOyB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgc2FtZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24oYSwgYil7XG4gIC8vIHdpdGggbGlicmFyeSB3cmFwcGVyIHNwZWNpYWwgY2FzZVxuICByZXR1cm4gYSA9PT0gYiB8fCBhID09PSAkUHJvbWlzZSAmJiBiID09PSBXcmFwcGVyO1xufTtcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICByZXR1cm4gc2FtZUNvbnN0cnVjdG9yKCRQcm9taXNlLCBDKVxuICAgID8gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgOiBuZXcgR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IEdlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbigkJHJlc29sdmUsICQkcmVqZWN0KXtcbiAgICBpZihyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ICA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCAgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn07XG52YXIgcGVyZm9ybSA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIGV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4ge2Vycm9yOiBlfTtcbiAgfVxufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbihwcm9taXNlLCBpc1JlamVjdCl7XG4gIGlmKHByb21pc2UuX24pcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uKCl7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdlxuICAgICAgLCBvayAgICA9IHByb21pc2UuX3MgPT0gMVxuICAgICAgLCBpICAgICA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uKHJlYWN0aW9uKXtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWxcbiAgICAgICAgLCByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZVxuICAgICAgICAsIHJlamVjdCAgPSByZWFjdGlvbi5yZWplY3RcbiAgICAgICAgLCBkb21haW4gID0gcmVhY3Rpb24uZG9tYWluXG4gICAgICAgICwgcmVzdWx0LCB0aGVuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYoaGFuZGxlcil7XG4gICAgICAgICAgaWYoIW9rKXtcbiAgICAgICAgICAgIGlmKHByb21pc2UuX2ggPT0gMilvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihoYW5kbGVyID09PSB0cnVlKXJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYoZG9tYWluKWRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZihkb21haW4pZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKXtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpe1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpe1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3ZcbiAgICAgICwgYWJydXB0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmKGlzVW5oYW5kbGVkKHByb21pc2UpKXtcbiAgICAgIGFicnVwdCA9IHBlcmZvcm0oZnVuY3Rpb24oKXtcbiAgICAgICAgaWYoaXNOb2RlKXtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pe1xuICAgICAgICAgIGhhbmRsZXIoe3Byb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWV9KTtcbiAgICAgICAgfSBlbHNlIGlmKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3Ipe1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZihhYnJ1cHQpdGhyb3cgYWJydXB0LmVycm9yO1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcbiAgaWYocHJvbWlzZS5faCA9PSAxKXJldHVybiBmYWxzZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jXG4gICAgLCBpICAgICA9IDBcbiAgICAsIHJlYWN0aW9uO1xuICB3aGlsZShjaGFpbi5sZW5ndGggPiBpKXtcbiAgICByZWFjdGlvbiA9IGNoYWluW2krK107XG4gICAgaWYocmVhY3Rpb24uZmFpbCB8fCAhaXNVbmhhbmRsZWQocmVhY3Rpb24ucHJvbWlzZSkpcmV0dXJuIGZhbHNlO1xuICB9IHJldHVybiB0cnVlO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpe1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmKGlzTm9kZSl7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpe1xuICAgICAgaGFuZGxlcih7cHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92fSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZihwcm9taXNlLl9kKXJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZighcHJvbWlzZS5fYSlwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24odmFsdWUpe1xuICB2YXIgcHJvbWlzZSA9IHRoaXNcbiAgICAsIHRoZW47XG4gIGlmKHByb21pc2UuX2QpcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYocHJvbWlzZSA9PT0gdmFsdWUpdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKXtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbigpe1xuICAgICAgICB2YXIgd3JhcHBlciA9IHtfdzogcHJvbWlzZSwgX2Q6IGZhbHNlfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoKGUpe1xuICAgICRyZWplY3QuY2FsbCh7X3c6IHByb21pc2UsIF9kOiBmYWxzZX0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZighVVNFX05BVElWRSl7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcil7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2goZXJyKXtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKXtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuICAgICAgdmFyIHJlYWN0aW9uICAgID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayAgICAgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgICA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHRoaXMuX2EpdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHRoaXMuX3Mpbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHByb21pc2UgID0gbmV3IEludGVybmFsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCAgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHtQcm9taXNlOiAkUHJvbWlzZX0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKXtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpXG4gICAgICAsICQkcmVqZWN0ICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpe1xuICAgIC8vIGluc3RhbmNlb2YgaW5zdGVhZCBvZiBpbnRlcm5hbCBzbG90IGNoZWNrIGJlY2F1c2Ugd2Ugc2hvdWxkIGZpeCBpdCB3aXRob3V0IHJlcGxhY2VtZW50IG5hdGl2ZSBQcm9taXNlIGNvcmVcbiAgICBpZih4IGluc3RhbmNlb2YgJFByb21pc2UgJiYgc2FtZUNvbnN0cnVjdG9yKHguY29uc3RydWN0b3IsIHRoaXMpKXJldHVybiB4O1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcylcbiAgICAgICwgJCRyZXNvbHZlICA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICAkJHJlc29sdmUoeCk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uKGl0ZXIpe1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSl7XG4gICAgdmFyIEMgICAgICAgICAgPSB0aGlzXG4gICAgICAsIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgLCByZXNvbHZlICAgID0gY2FwYWJpbGl0eS5yZXNvbHZlXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgdmFyIHZhbHVlcyAgICA9IFtdXG4gICAgICAgICwgaW5kZXggICAgID0gMFxuICAgICAgICAsIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uKHByb21pc2Upe1xuICAgICAgICB2YXIgJGluZGV4ICAgICAgICA9IGluZGV4KytcbiAgICAgICAgICAsIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgICAgICBpZihhbHJlYWR5Q2FsbGVkKXJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkICA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZihhYnJ1cHQpcmVqZWN0KGFicnVwdC5lcnJvcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKXtcbiAgICB2YXIgQyAgICAgICAgICA9IHRoaXNcbiAgICAgICwgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbihwcm9taXNlKXtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYoYWJydXB0KXJlamVjdChhYnJ1cHQuZXJyb3IpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pOyIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24oaXRlcmF0ZWQpe1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbigpe1xuICB2YXIgTyAgICAgPSB0aGlzLl90XG4gICAgLCBpbmRleCA9IHRoaXMuX2lcbiAgICAsIHBvaW50O1xuICBpZihpbmRleCA+PSBPLmxlbmd0aClyZXR1cm4ge3ZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWV9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4ge3ZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2V9O1xufSk7IiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgREVTQ1JJUFRPUlMgICAgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKVxuICAsIE1FVEEgICAgICAgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWVxuICAsICRmYWlscyAgICAgICAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAsIHNoYXJlZCAgICAgICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCB1aWQgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3VpZCcpXG4gICwgd2tzICAgICAgICAgICAgPSByZXF1aXJlKCcuL193a3MnKVxuICAsIHdrc0V4dCAgICAgICAgID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpXG4gICwgd2tzRGVmaW5lICAgICAgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJylcbiAgLCBrZXlPZiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2tleW9mJylcbiAgLCBlbnVtS2V5cyAgICAgICA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpXG4gICwgaXNBcnJheSAgICAgICAgPSByZXF1aXJlKCcuL19pcy1hcnJheScpXG4gICwgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIHRvSU9iamVjdCAgICAgID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9QcmltaXRpdmUgICAgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKVxuICAsIGNyZWF0ZURlc2MgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgX2NyZWF0ZSAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJylcbiAgLCBnT1BORXh0ICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpXG4gICwgJEdPUEQgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpXG4gICwgJERQICAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsICRrZXlzICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIGdPUEQgICAgICAgICAgID0gJEdPUEQuZlxuICAsIGRQICAgICAgICAgICAgID0gJERQLmZcbiAgLCBnT1BOICAgICAgICAgICA9IGdPUE5FeHQuZlxuICAsICRTeW1ib2wgICAgICAgID0gZ2xvYmFsLlN5bWJvbFxuICAsICRKU09OICAgICAgICAgID0gZ2xvYmFsLkpTT05cbiAgLCBfc3RyaW5naWZ5ICAgICA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeVxuICAsIFBST1RPVFlQRSAgICAgID0gJ3Byb3RvdHlwZSdcbiAgLCBISURERU4gICAgICAgICA9IHdrcygnX2hpZGRlbicpXG4gICwgVE9fUFJJTUlUSVZFICAgPSB3a3MoJ3RvUHJpbWl0aXZlJylcbiAgLCBpc0VudW0gICAgICAgICA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlXG4gICwgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpXG4gICwgQWxsU3ltYm9scyAgICAgPSBzaGFyZWQoJ3N5bWJvbHMnKVxuICAsIE9QU3ltYm9scyAgICAgID0gc2hhcmVkKCdvcC1zeW1ib2xzJylcbiAgLCBPYmplY3RQcm90byAgICA9IE9iamVjdFtQUk9UT1RZUEVdXG4gICwgVVNFX05BVElWRSAgICAgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nXG4gICwgUU9iamVjdCAgICAgICAgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIGRQKHRoaXMsICdhJywge3ZhbHVlOiA3fSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbihpdCwga2V5LCBEKXtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmKHByb3RvRGVzYylkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbih0YWcpe1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKXtcbiAgaWYoaXQgPT09IE9iamVjdFByb3RvKSRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmKGhhcyhBbGxTeW1ib2xzLCBrZXkpKXtcbiAgICBpZighRC5lbnVtZXJhYmxlKXtcbiAgICAgIGlmKCFoYXMoaXQsIEhJRERFTikpZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSlpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHtlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKX0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApe1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSlcbiAgICAsIGkgICAgPSAwXG4gICAgLCBsID0ga2V5cy5sZW5ndGhcbiAgICAsIGtleTtcbiAgd2hpbGUobCA+IGkpJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCl7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KXtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSl7XG4gIGl0ICA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSlyZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKUQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpe1xuICB2YXIgbmFtZXMgID0gZ09QTih0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSl7XG4gICAgaWYoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKXJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCl7XG4gIHZhciBJU19PUCAgPSBpdCA9PT0gT2JqZWN0UHJvdG9cbiAgICAsIG5hbWVzICA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSl7XG4gICAgaWYoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKXJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYoIVVTRV9OQVRJVkUpe1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCl7XG4gICAgaWYodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICBpZih0aGlzID09PSBPYmplY3RQcm90bykkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZihoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKXRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKXNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywge2NvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0fSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpe1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgICA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mICA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZihERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKXtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24obmFtZSl7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfVxufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7U3ltYm9sOiAkU3ltYm9sfSk7XG5cbmZvcih2YXIgc3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBpID0gMDsgc3ltYm9scy5sZW5ndGggPiBpOyApd2tzKHN5bWJvbHNbaSsrXSk7XG5cbmZvcih2YXIgc3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGkgPSAwOyBzeW1ib2xzLmxlbmd0aCA+IGk7ICl3a3NEZWZpbmUoc3ltYm9sc1tpKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbihrZXkpe1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioa2V5KXtcbiAgICBpZihpc1N5bWJvbChrZXkpKXJldHVybiBrZXlPZihTeW1ib2xSZWdpc3RyeSwga2V5KTtcbiAgICB0aHJvdyBUeXBlRXJyb3Ioa2V5ICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24oKXsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbigpe1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7YTogU30pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCl7XG4gICAgaWYoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgdmFyIGFyZ3MgPSBbaXRdXG4gICAgICAsIGkgICAgPSAxXG4gICAgICAsIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYodHlwZW9mIHJlcGxhY2VyID09ICdmdW5jdGlvbicpJHJlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgaWYoJHJlcGxhY2VyIHx8ICFpc0FycmF5KHJlcGxhY2VyKSlyZXBsYWNlciA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuICAgICAgaWYoJHJlcGxhY2VyKXZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZighaXNTeW1ib2wodmFsdWUpKXJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywge3RvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpfSk7IiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7IiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7IiwicmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnbG9iYWwgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBoaWRlICAgICAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgSXRlcmF0b3JzICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgVE9fU1RSSU5HX1RBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IodmFyIGNvbGxlY3Rpb25zID0gWydOb2RlTGlzdCcsICdET01Ub2tlbkxpc3QnLCAnTWVkaWFMaXN0JywgJ1N0eWxlU2hlZXRMaXN0JywgJ0NTU1J1bGVMaXN0J10sIGkgPSAwOyBpIDwgNTsgaSsrKXtcbiAgdmFyIE5BTUUgICAgICAgPSBjb2xsZWN0aW9uc1tpXVxuICAgICwgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXVxuICAgICwgcHJvdG8gICAgICA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmKHByb3RvICYmICFwcm90b1tUT19TVFJJTkdfVEFHXSloaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgSXRlcmF0b3JzW05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufSIsIi8qIVxuICogbWkxOG4gLSBodHRwczovL2dpdGh1Yi5jb20vRHJhZ2dhYmxlL21pMThuXG4gKiBWZXJzaW9uOiAwLjMuM1xuICogQXV0aG9yOiBLZXZpbiBDaGFwcGVsbCA8a2V2aW4uYi5jaGFwcGVsbEBnbWFpbC5jb20+IChodHRwOi8va2V2aW4tY2hhcHBlbGwuY29tKVxuICovXG5tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHIpe2lmKGVbcl0pcmV0dXJuIGVbcl0uZXhwb3J0czt2YXIgbz1lW3JdPXtleHBvcnRzOnt9LGlkOnIsbG9hZGVkOiExfTtyZXR1cm4gdFtyXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxuKSxvLmxvYWRlZD0hMCxvLmV4cG9ydHN9dmFyIGU9e307cmV0dXJuIG4ubT10LG4uYz1lLG4ucD1cImRpc3QvXCIsbigwKX0oW2Z1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7XCJkZWZhdWx0XCI6dH19T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG89ZSg1NyksaT1yKG8pLHU9ZSg1MyksYz1yKHUpLGY9ZSg1NiksYT1yKGYpLHM9ZSg0OCksbD1yKHMpLHA9ZSg1NCksaD1yKHApLHY9ZSg1NSkseT1yKHYpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7KDAsaFtcImRlZmF1bHRcIl0pKHRoaXMsdCk7dmFyIG49e2V4dGVuc2lvbjpcIi5sYW5nXCIsbG9jYXRpb246XCJhc3NldHMvbGFuZy9cIixsYW5nczpbXCJlbi1VU1wiXSxsb2NhbGU6XCJlbi1VU1wiLHByZWxvYWRlZDp7fX0sZT10aGlzO2UuaW5pdD1mdW5jdGlvbih0KXtyZXR1cm4gZS5jb25maWc9KDAsbFtcImRlZmF1bHRcIl0pKHt9LG4sdCksZS5sYW5ncz0oMCxsW1wiZGVmYXVsdFwiXSkoe30sZS5jb25maWcucHJlbG9hZGVkKSxlLmxvY2FsZT1lLmNvbmZpZy5sb2NhbGV8fGUuY29uZmlnLmxhbmdzWzBdLGUuc2V0Q3VycmVudChlLmxvY2FsZSl9fXJldHVybigwLHlbXCJkZWZhdWx0XCJdKSh0LFt7a2V5OlwiZ2V0VmFsdWVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJlbnRbdF18fHR9fSx7a2V5OlwibWFrZVNhZmVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbj17XCJ7XCI6XCJcXFxce1wiLFwifVwiOlwiXFxcXH1cIixcInxcIjpcIlxcXFx8XCJ9O3JldHVybiB0PXQucmVwbGFjZSgvXFx7fFxcfXxcXHwvZyxmdW5jdGlvbih0KXtyZXR1cm4gblt0XX0pLG5ldyBSZWdFeHAodCxcImdcIil9fSx7a2V5OlwicHV0XCIsdmFsdWU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5jdXJyZW50W3RdPW59fSx7a2V5OlwiZ2V0XCIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLHI9dGhpcy5nZXRWYWx1ZSh0KSxvPXIubWF0Y2goL1xce1teXFx9XSs/XFx9L2cpLGk9dm9pZCAwO2lmKG4mJm8paWYoXCJvYmplY3RcIj09PShcInVuZGVmaW5lZFwiPT10eXBlb2Ygbj9cInVuZGVmaW5lZFwiOigwLGFbXCJkZWZhdWx0XCJdKShuKSkpZm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1KyspaT1vW3VdLnN1YnN0cmluZygxLG9bdV0ubGVuZ3RoLTEpLHI9ci5yZXBsYWNlKGUubWFrZVNhZmUob1t1XSksbltpXXx8XCJcIik7ZWxzZSByPXIucmVwbGFjZSgvXFx7W15cXH1dKz9cXH0vZyxuKTtyZXR1cm4gcn19LHtrZXk6XCJmcm9tRmlsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPXQuc3BsaXQoXCJcXG5cIikscj17fSxvPTA7bzxlLmxlbmd0aDtvKyspaWYobj1lW29dLm1hdGNoKC9eKC4rPykgKj89ICo/KFteXFxuXSspLykpe3ZhciBpPW5bMl0ucmVwbGFjZSgvXlxccyt8XFxzKyQvLFwiXCIpO3JbblsxXV09aX1yZXR1cm4gcn19LHtrZXk6XCJwcm9jZXNzRmlsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXQucmVwbGFjZSgvXFxuXFxuL2csXCJcXG5cIik7cmV0dXJuIHRoaXMuZnJvbUZpbGUobil9fSx7a2V5OlwibG9hZExhbmdcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgd2luZG93LlByb21pc2UoZnVuY3Rpb24oZSxyKXtuLmxhbmdzW3RdP2Uobi5sYW5nc1t0XSk6IWZ1bmN0aW9uKCl7dmFyIG89bmV3IFhNTEh0dHBSZXF1ZXN0LGk9bi5jb25maWcubG9jYXRpb24rdCtuLmNvbmZpZy5leHRlbnNpb247by5vcGVuKFwiR0VUXCIsaSwhMCksby5vbmxvYWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXR1czw9MzA0KXt2YXIgaT1uLnByb2Nlc3NGaWxlKG8ucmVzcG9uc2VUZXh0KTtuLmxhbmdzW3RdPWksZShpKX1lbHNlIHIoe3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Om8uc3RhdHVzVGV4dH0pfSxvLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpvLnN0YXR1c1RleHR9KX0sby5zZW5kKCl9KCl9KX19LHtrZXk6XCJzZXRDdXJyZW50XCIsdmFsdWU6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgbj0oMCxjW1wiZGVmYXVsdFwiXSkoaVtcImRlZmF1bHRcIl0ubWFyayhmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlwiZW4tVVNcIjtyZXR1cm4gaVtcImRlZmF1bHRcIl0ud3JhcChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gbi5uZXh0PTIsdGhpcy5sb2FkTGFuZyh0KTtjYXNlIDI6cmV0dXJuIHRoaXMubG9jYWxlPXQsdGhpcy5jdXJyZW50PXRoaXMubGFuZ3NbdF0sbi5hYnJ1cHQoXCJyZXR1cm5cIix0aGlzLmN1cnJlbnQpO2Nhc2UgNTpjYXNlXCJlbmRcIjpyZXR1cm4gbi5zdG9wKCl9fSxlLHRoaXMpfSkpO3JldHVybiB0fSgpfSx7a2V5OlwiZ2V0TGFuZ3NcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWcubGFuZ3N9fV0pLHR9KCk7bltcImRlZmF1bHRcIl09bmV3IGR9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI4KShcIndrc1wiKSxvPWUoMjEpLGk9ZSgyKS5TeW1ib2wsdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpLGM9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByW3RdfHwoclt0XT11JiZpW3RdfHwodT9pOm8pKFwiU3ltYm9sLlwiK3QpKX07Yy5zdG9yZT1yfSxmdW5jdGlvbih0LG4pe3ZhciBlPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPWUpfSxmdW5jdGlvbih0LG4pe3ZhciBlPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNC4wXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9ZSl9LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9IWUoMTIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg2KSxvPWUoMzUpLGk9ZSgzMCksdT1PYmplY3QuZGVmaW5lUHJvcGVydHk7bi5mPWUoNCk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsbixlKXtpZihyKHQpLG49aShuLCEwKSxyKGUpLG8pdHJ5e3JldHVybiB1KHQsbixlKX1jYXRjaChjKXt9aWYoXCJnZXRcImluIGV8fFwic2V0XCJpbiBlKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiBlJiYodFtuXT1lLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbil7dmFyIGU9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNSksbz1lKDE5KTt0LmV4cG9ydHM9ZSg0KT9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIuZih0LG4sbygxLGUpKX06ZnVuY3Rpb24odCxuLGUpe3JldHVybiB0W25dPWUsdH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDM2KSxvPWUoMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcihvKHQpKX19LGZ1bmN0aW9uKHQsbil7dmFyIGU9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKSxvPWUoMyksaT1lKDE2KSx1PWUoOCksYz1cInByb3RvdHlwZVwiLGY9ZnVuY3Rpb24odCxuLGUpe3ZhciBhLHMsbCxwPXQmZi5GLGg9dCZmLkcsdj10JmYuUyx5PXQmZi5QLGQ9dCZmLkIsZz10JmYuVyxtPWg/bzpvW25dfHwob1tuXT17fSksdz1tW2NdLHg9aD9yOnY/cltuXToocltuXXx8e30pW2NdO2gmJihlPW4pO2ZvcihhIGluIGUpcz0hcCYmeCYmdm9pZCAwIT09eFthXSxzJiZhIGluIG18fChsPXM/eFthXTplW2FdLG1bYV09aCYmXCJmdW5jdGlvblwiIT10eXBlb2YgeFthXT9lW2FdOmQmJnM/aShsLHIpOmcmJnhbYV09PWw/ZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24obixlLHIpe2lmKHRoaXMgaW5zdGFuY2VvZiB0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KG4pO2Nhc2UgMjpyZXR1cm4gbmV3IHQobixlKX1yZXR1cm4gbmV3IHQobixlLHIpfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIG5bY109dFtjXSxufShsKTp5JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBsP2koRnVuY3Rpb24uY2FsbCxsKTpsLHkmJigobS52aXJ0dWFsfHwobS52aXJ0dWFsPXt9KSlbYV09bCx0JmYuUiYmdyYmIXdbYV0mJnUodyxhLGwpKSl9O2YuRj0xLGYuRz0yLGYuUz00LGYuUD04LGYuQj0xNixmLlc9MzIsZi5VPTY0LGYuUj0xMjgsdC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChuKXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9e319LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDQwKSxvPWUoMjUpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe2lmKHIodCksdm9pZCAwPT09bilyZXR1cm4gdDtzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKG4sZSl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jYWxsKG4sZSxyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHQuY2FsbChuLGUscixvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPSEwfSxmdW5jdGlvbih0LG4pe24uZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6bn19fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg1KS5mLG89ZSg3KSxpPWUoMSkoXCJ0b1N0cmluZ1RhZ1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3QmJiFvKHQ9ZT90OnQucHJvdG90eXBlLGkpJiZyKHQsaSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm59KX19LGZ1bmN0aW9uKHQsbil7dmFyIGU9MCxyPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrZStyKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PXQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiK3QpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTMpLG89ZSgyKS5kb2N1bWVudCxpPXIobykmJnIoby5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGk/by5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9XCJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2ZcIi5zcGxpdChcIixcIil9LGZ1bmN0aW9uKHQsbil7bi5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI4KShcImtleXNcIiksbz1lKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHJbdF18fChyW3RdPW8odCkpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMiksbz1cIl9fY29yZS1qc19zaGFyZWRfX1wiLGk9cltvXXx8KHJbb109e30pO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XXx8KGlbdF09e30pfX0sZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLmNlaWwscj1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP3I6ZSkodCl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIXIodCkpcmV0dXJuIHQ7dmFyIGUsbztpZihuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihlPXQudG9TdHJpbmcpJiYhcihvPWUuY2FsbCh0KSkpcmV0dXJuIG87aWYoXCJmdW5jdGlvblwiPT10eXBlb2YoZT10LnZhbHVlT2YpJiYhcihvPWUuY2FsbCh0KSkpcmV0dXJuIG87aWYoIW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9dC50b1N0cmluZykmJiFyKG89ZS5jYWxsKHQpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKSxvPWUoMyksaT1lKDE3KSx1PWUoMzIpLGM9ZSg1KS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1vLlN5bWJvbHx8KG8uU3ltYm9sPWk/e306ci5TeW1ib2x8fHt9KTtcIl9cIj09dC5jaGFyQXQoMCl8fHQgaW4gbnx8YyhuLHQse3ZhbHVlOnUuZih0KX0pfX0sZnVuY3Rpb24odCxuLGUpe24uZj1lKDEpfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMCksbz1lKDEpKFwidG9TdHJpbmdUYWdcIiksaT1cIkFyZ3VtZW50c1wiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksdT1mdW5jdGlvbih0LG4pe3RyeXtyZXR1cm4gdFtuXX1jYXRjaChlKXt9fTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG4sZSxjO3JldHVybiB2b2lkIDA9PT10P1wiVW5kZWZpbmVkXCI6bnVsbD09PXQ/XCJOdWxsXCI6XCJzdHJpbmdcIj09dHlwZW9mKGU9dShuPU9iamVjdCh0KSxvKSk/ZTppP3Iobik6XCJPYmplY3RcIj09KGM9cihuKSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4uY2FsbGVlP1wiQXJndW1lbnRzXCI6Y319LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSgyKS5kb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPSFlKDQpJiYhZSgxMikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUoMjQpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEwKTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09cih0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDE3KSxvPWUoMTEpLGk9ZSg0MSksdT1lKDgpLGM9ZSg3KSxmPWUoMTQpLGE9ZSg3Mikscz1lKDIwKSxsPWUoODIpLHA9ZSgxKShcIml0ZXJhdG9yXCIpLGg9IShbXS5rZXlzJiZcIm5leHRcImluW10ua2V5cygpKSx2PVwiQEBpdGVyYXRvclwiLHk9XCJrZXlzXCIsZD1cInZhbHVlc1wiLGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLG0sdyx4LGIpe2EoZSxuLG0pO3ZhciBfLE8saixTPWZ1bmN0aW9uKHQpe2lmKCFoJiZ0IGluIGspcmV0dXJuIGtbdF07c3dpdGNoKHQpe2Nhc2UgeTpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcyx0KX07Y2FzZSBkOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcyx0KX19LEU9bitcIiBJdGVyYXRvclwiLFQ9dz09ZCxQPSExLGs9dC5wcm90b3R5cGUsTD1rW3BdfHxrW3ZdfHx3JiZrW3ddLE09THx8Uyh3KSxGPXc/VD9TKFwiZW50cmllc1wiKTpNOnZvaWQgMCxOPVwiQXJyYXlcIj09bj9rLmVudHJpZXN8fEw6TDtpZihOJiYoaj1sKE4uY2FsbChuZXcgdCkpLGohPT1PYmplY3QucHJvdG90eXBlJiYocyhqLEUsITApLHJ8fGMoaixwKXx8dShqLHAsZykpKSxUJiZMJiZMLm5hbWUhPT1kJiYoUD0hMCxNPWZ1bmN0aW9uKCl7cmV0dXJuIEwuY2FsbCh0aGlzKX0pLHImJiFifHwhaCYmIVAmJmtbcF18fHUoayxwLE0pLGZbbl09TSxmW0VdPWcsdylpZihfPXt2YWx1ZXM6VD9NOlMoZCksa2V5czp4P006Uyh5KSxlbnRyaWVzOkZ9LGIpZm9yKE8gaW4gXylPIGluIGt8fGkoayxPLF9bT10pO2Vsc2UgbyhvLlArby5GKihofHxQKSxuLF8pO3JldHVybiBffX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNiksbz1lKDc5KSxpPWUoMjUpLHU9ZSgyNykoXCJJRV9QUk9UT1wiKSxjPWZ1bmN0aW9uKCl7fSxmPVwicHJvdG90eXBlXCIsYT1mdW5jdGlvbigpe3ZhciB0LG49ZSgyNCkoXCJpZnJhbWVcIikscj1pLmxlbmd0aCxvPVwiPFwiLHU9XCI+XCI7Zm9yKG4uc3R5bGUuZGlzcGxheT1cIm5vbmVcIixlKDM0KS5hcHBlbmRDaGlsZChuKSxuLnNyYz1cImphdmFzY3JpcHQ6XCIsdD1uLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsdC5vcGVuKCksdC53cml0ZShvK1wic2NyaXB0XCIrdStcImRvY3VtZW50LkY9T2JqZWN0XCIrbytcIi9zY3JpcHRcIit1KSx0LmNsb3NlKCksYT10LkY7ci0tOylkZWxldGUgYVtmXVtpW3JdXTtyZXR1cm4gYSgpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxuKXt2YXIgZTtyZXR1cm4gbnVsbCE9PXQ/KGNbZl09cih0KSxlPW5ldyBjLGNbZl09bnVsbCxlW3VdPXQpOmU9YSgpLHZvaWQgMD09PW4/ZTpvKGUsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg0MCksbz1lKDI1KS5jb25jYXQoXCJsZW5ndGhcIixcInByb3RvdHlwZVwiKTtuLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbyl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg3KSxvPWUoOSksaT1lKDY1KSghMSksdT1lKDI3KShcIklFX1BST1RPXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlLGM9byh0KSxmPTAsYT1bXTtmb3IoZSBpbiBjKWUhPXUmJnIoYyxlKSYmYS5wdXNoKGUpO2Zvcig7bi5sZW5ndGg+ZjspcihjLGU9bltmKytdKSYmKH5pKGEsZSl8fGEucHVzaChlKSk7cmV0dXJuIGF9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPWUoOCl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcixvLGksdT1lKDE2KSxjPWUoNjgpLGY9ZSgzNCksYT1lKDI0KSxzPWUoMiksbD1zLnByb2Nlc3MscD1zLnNldEltbWVkaWF0ZSxoPXMuY2xlYXJJbW1lZGlhdGUsdj1zLk1lc3NhZ2VDaGFubmVsLHk9MCxkPXt9LGc9XCJvbnJlYWR5c3RhdGVjaGFuZ2VcIixtPWZ1bmN0aW9uKCl7dmFyIHQ9K3RoaXM7aWYoZC5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIG49ZFt0XTtkZWxldGUgZFt0XSxuKCl9fSx3PWZ1bmN0aW9uKHQpe20uY2FsbCh0LmRhdGEpfTtwJiZofHwocD1mdW5jdGlvbih0KXtmb3IodmFyIG49W10sZT0xO2FyZ3VtZW50cy5sZW5ndGg+ZTspbi5wdXNoKGFyZ3VtZW50c1tlKytdKTtyZXR1cm4gZFsrK3ldPWZ1bmN0aW9uKCl7YyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6RnVuY3Rpb24odCksbil9LHIoeSkseX0saD1mdW5jdGlvbih0KXtkZWxldGUgZFt0XX0sXCJwcm9jZXNzXCI9PWUoMTApKGwpP3I9ZnVuY3Rpb24odCl7bC5uZXh0VGljayh1KG0sdCwxKSl9OnY/KG89bmV3IHYsaT1vLnBvcnQyLG8ucG9ydDEub25tZXNzYWdlPXcscj11KGkucG9zdE1lc3NhZ2UsaSwxKSk6cy5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIXMuaW1wb3J0U2NyaXB0cz8ocj1mdW5jdGlvbih0KXtzLnBvc3RNZXNzYWdlKHQrXCJcIixcIipcIil9LHMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIix3LCExKSk6cj1nIGluIGEoXCJzY3JpcHRcIik/ZnVuY3Rpb24odCl7Zi5hcHBlbmRDaGlsZChhKFwic2NyaXB0XCIpKVtnXT1mdW5jdGlvbigpe2YucmVtb3ZlQ2hpbGQodGhpcyksbS5jYWxsKHQpfX06ZnVuY3Rpb24odCl7c2V0VGltZW91dCh1KG0sdCwxKSwwKX0pLHQuZXhwb3J0cz17c2V0OnAsY2xlYXI6aH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI5KSxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP28ocih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHIodCkpfX0sZnVuY3Rpb24odCxuKXt9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDg2KSghMCk7ZSgzNykoU3RyaW5nLFwiU3RyaW5nXCIsZnVuY3Rpb24odCl7dGhpcy5fdD1TdHJpbmcodCksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciB0LG49dGhpcy5fdCxlPXRoaXMuX2k7cmV0dXJuIGU+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9cihuLGUpLHRoaXMuX2krPXQubGVuZ3RoLHt2YWx1ZTp0LGRvbmU6ITF9KX0pfSxmdW5jdGlvbih0LG4sZSl7ZSg4OSk7Zm9yKHZhciByPWUoMiksbz1lKDgpLGk9ZSgxNCksdT1lKDEpKFwidG9TdHJpbmdUYWdcIiksYz1bXCJOb2RlTGlzdFwiLFwiRE9NVG9rZW5MaXN0XCIsXCJNZWRpYUxpc3RcIixcIlN0eWxlU2hlZXRMaXN0XCIsXCJDU1NSdWxlTGlzdFwiXSxmPTA7Zjw1O2YrKyl7dmFyIGE9Y1tmXSxzPXJbYV0sbD1zJiZzLnByb3RvdHlwZTtsJiYhbFt1XSYmbyhsLHUsYSksaVthXT1pLkFycmF5fX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz17XCJkZWZhdWx0XCI6ZSg1OCksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9e1wiZGVmYXVsdFwiOmUoNTkpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPXtcImRlZmF1bHRcIjplKDYwKSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz17XCJkZWZhdWx0XCI6ZSg2MSksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9e1wiZGVmYXVsdFwiOmUoNjIpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e1wiZGVmYXVsdFwiOnR9fW4uX19lc01vZHVsZT0hMDt2YXIgbz1lKDUwKSxpPXIobyk7bltcImRlZmF1bHRcIl09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG5ldyBpW1wiZGVmYXVsdFwiXShmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIobyx1KXt0cnl7dmFyIGM9bltvXSh1KSxmPWMudmFsdWV9Y2F0Y2goYSl7cmV0dXJuIHZvaWQgZShhKX1yZXR1cm4gYy5kb25lP3ZvaWQgdChmKTppW1wiZGVmYXVsdFwiXS5yZXNvbHZlKGYpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHIoXCJuZXh0XCIsdCl9LGZ1bmN0aW9uKHQpe3JldHVybiByKFwidGhyb3dcIix0KX0pfXJldHVybiByKFwibmV4dFwiKX0pfX19LGZ1bmN0aW9uKHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5fX2VzTW9kdWxlPSEwLG5bXCJkZWZhdWx0XCJdPWZ1bmN0aW9uKHQsbil7aWYoISh0IGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7XCJkZWZhdWx0XCI6dH19bi5fX2VzTW9kdWxlPSEwO3ZhciBvPWUoNDkpLGk9cihvKTtuW1wiZGVmYXVsdFwiXT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxuKXtmb3IodmFyIGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHI9bltlXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksKDAsaVtcImRlZmF1bHRcIl0pKHQsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihuLGUscil7cmV0dXJuIGUmJnQobi5wcm90b3R5cGUsZSksciYmdChuLHIpLG59fSgpfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e1wiZGVmYXVsdFwiOnR9fW4uX19lc01vZHVsZT0hMDt2YXIgbz1lKDUyKSxpPXIobyksdT1lKDUxKSxjPXIodSksZj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjW1wiZGVmYXVsdFwiXSYmXCJzeW1ib2xcIj09dHlwZW9mIGlbXCJkZWZhdWx0XCJdP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNbXCJkZWZhdWx0XCJdJiZ0LmNvbnN0cnVjdG9yPT09Y1tcImRlZmF1bHRcIl0/XCJzeW1ib2xcIjp0eXBlb2YgdH07bltcImRlZmF1bHRcIl09XCJmdW5jdGlvblwiPT10eXBlb2YgY1tcImRlZmF1bHRcIl0mJlwic3ltYm9sXCI9PT1mKGlbXCJkZWZhdWx0XCJdKT9mdW5jdGlvbih0KXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgdD9cInVuZGVmaW5lZFwiOmYodCl9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjW1wiZGVmYXVsdFwiXSYmdC5jb25zdHJ1Y3Rvcj09PWNbXCJkZWZhdWx0XCJdP1wic3ltYm9sXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIHQ/XCJ1bmRlZmluZWRcIjpmKHQpfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz1lKDk3KX0sZnVuY3Rpb24odCxuLGUpe2UoOTApLHQuZXhwb3J0cz1lKDMpLk9iamVjdC5hc3NpZ259LGZ1bmN0aW9uKHQsbixlKXtlKDkxKTt2YXIgcj1lKDMpLk9iamVjdDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3JldHVybiByLmRlZmluZVByb3BlcnR5KHQsbixlKX19LGZ1bmN0aW9uKHQsbixlKXtlKDQ1KSxlKDQ2KSxlKDQ3KSxlKDkyKSx0LmV4cG9ydHM9ZSgzKS5Qcm9taXNlfSxmdW5jdGlvbih0LG4sZSl7ZSg5MyksZSg0NSksZSg5NCksZSg5NSksdC5leHBvcnRzPWUoMykuU3ltYm9sfSxmdW5jdGlvbih0LG4sZSl7ZSg0NiksZSg0NyksdC5leHBvcnRzPWUoMzIpLmYoXCJpdGVyYXRvclwiKX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSxyKXtpZighKHQgaW5zdGFuY2VvZiBuKXx8dm9pZCAwIT09ciYmciBpbiB0KXRocm93IFR5cGVFcnJvcihlK1wiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg5KSxvPWUoNDMpLGk9ZSg4Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLGUsdSl7dmFyIGMsZj1yKG4pLGE9byhmLmxlbmd0aCkscz1pKHUsYSk7aWYodCYmZSE9ZSl7Zm9yKDthPnM7KWlmKGM9ZltzKytdLGMhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO2E+cztzKyspaWYoKHR8fHMgaW4gZikmJmZbc109PT1lKXJldHVybiB0fHxzfHwwO3JldHVybiF0JiYtMX19fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNSksbz1lKDI2KSxpPWUoMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1yKHQpLGU9by5mO2lmKGUpZm9yKHZhciB1LGM9ZSh0KSxmPWkuZixhPTA7Yy5sZW5ndGg+YTspZi5jYWxsKHQsdT1jW2ErK10pJiZuLnB1c2godSk7cmV0dXJuIG59fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNiksbz1lKDcxKSxpPWUoNjkpLHU9ZSg2KSxjPWUoNDMpLGY9ZSg4OCksYT17fSxzPXt9LG49dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLGwscCl7dmFyIGgsdix5LGQsZz1wP2Z1bmN0aW9uKCl7cmV0dXJuIHR9OmYodCksbT1yKGUsbCxuPzI6MSksdz0wO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGcpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGl0ZXJhYmxlIVwiKTtpZihpKGcpKXtmb3IoaD1jKHQubGVuZ3RoKTtoPnc7dysrKWlmKGQ9bj9tKHUodj10W3ddKVswXSx2WzFdKTptKHRbd10pLGQ9PT1hfHxkPT09cylyZXR1cm4gZH1lbHNlIGZvcih5PWcuY2FsbCh0KTshKHY9eS5uZXh0KCkpLmRvbmU7KWlmKGQ9byh5LG0sdi52YWx1ZSxuKSxkPT09YXx8ZD09PXMpcmV0dXJuIGR9O24uQlJFQUs9YSxuLlJFVFVSTj1zfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7dmFyIHI9dm9pZCAwPT09ZTtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcj90KCk6dC5jYWxsKGUpO2Nhc2UgMTpyZXR1cm4gcj90KG5bMF0pOnQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gcj90KG5bMF0sblsxXSk6dC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHI/dChuWzBdLG5bMV0sblsyXSk6dC5jYWxsKGUsblswXSxuWzFdLG5bMl0pO2Nhc2UgNDpyZXR1cm4gcj90KG5bMF0sblsxXSxuWzJdLG5bM10pOnQuY2FsbChlLG5bMF0sblsxXSxuWzJdLG5bM10pfXJldHVybiB0LmFwcGx5KGUsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNCksbz1lKDEpKFwiaXRlcmF0b3JcIiksaT1BcnJheS5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10JiYoci5BcnJheT09PXR8fGlbb109PT10KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEwKTt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJBcnJheVwiPT1yKHQpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLG8pe3RyeXtyZXR1cm4gbz9uKHIoZSlbMF0sZVsxXSk6bihlKX1jYXRjaChpKXt2YXIgdT10W1wicmV0dXJuXCJdO3Rocm93IHZvaWQgMCE9PXUmJnIodS5jYWxsKHQpKSxpfX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDM4KSxvPWUoMTkpLGk9ZSgyMCksdT17fTtlKDgpKHUsZSgxKShcIml0ZXJhdG9yXCIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3QucHJvdG90eXBlPXIodSx7bmV4dDpvKDEsZSl9KSxpKHQsbitcIiBJdGVyYXRvclwiKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEpKFwiaXRlcmF0b3JcIiksbz0hMTt0cnl7dmFyIGk9WzddW3JdKCk7aVtcInJldHVyblwiXT1mdW5jdGlvbigpe289ITB9LEFycmF5LmZyb20oaSxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaCh1KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIW4mJiFvKXJldHVybiExO3ZhciBlPSExO3RyeXt2YXIgaT1bN10sdT1pW3JdKCk7dS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ZT0hMH19LGlbcl09ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdChpKX1jYXRjaChjKXt9cmV0dXJuIGV9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybnt2YWx1ZTpuLGRvbmU6ISF0fX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE1KSxvPWUoOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLGk9byh0KSx1PXIoaSksYz11Lmxlbmd0aCxmPTA7Yz5mOylpZihpW2U9dVtmKytdXT09PW4pcmV0dXJuIGV9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyMSkoXCJtZXRhXCIpLG89ZSgxMyksaT1lKDcpLHU9ZSg1KS5mLGM9MCxmPU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LGE9IWUoMTIpKGZ1bmN0aW9uKCl7cmV0dXJuIGYoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSxzPWZ1bmN0aW9uKHQpe3UodCxyLHt2YWx1ZTp7aTpcIk9cIisgKytjLHc6e319fSl9LGw9ZnVuY3Rpb24odCxuKXtpZighbyh0KSlyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdD90OihcInN0cmluZ1wiPT10eXBlb2YgdD9cIlNcIjpcIlBcIikrdDtpZighaSh0LHIpKXtpZighZih0KSlyZXR1cm5cIkZcIjtpZighbilyZXR1cm5cIkVcIjtzKHQpfXJldHVybiB0W3JdLml9LHA9ZnVuY3Rpb24odCxuKXtpZighaSh0LHIpKXtpZighZih0KSlyZXR1cm4hMDtpZighbilyZXR1cm4hMTtzKHQpfXJldHVybiB0W3JdLnd9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIGEmJnYuTkVFRCYmZih0KSYmIWkodCxyKSYmcyh0KSx0fSx2PXQuZXhwb3J0cz17S0VZOnIsTkVFRDohMSxmYXN0S2V5OmwsZ2V0V2VhazpwLG9uRnJlZXplOmh9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKSxvPWUoNDIpLnNldCxpPXIuTXV0YXRpb25PYnNlcnZlcnx8ci5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLHU9ci5wcm9jZXNzLGM9ci5Qcm9taXNlLGY9XCJwcm9jZXNzXCI9PWUoMTApKHUpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LG4sZSxhPWZ1bmN0aW9uKCl7dmFyIHIsbztmb3IoZiYmKHI9dS5kb21haW4pJiZyLmV4aXQoKTt0Oyl7bz10LmZuLHQ9dC5uZXh0O3RyeXtvKCl9Y2F0Y2goaSl7dGhyb3cgdD9lKCk6bj12b2lkIDAsaX19bj12b2lkIDAsciYmci5lbnRlcigpfTtpZihmKWU9ZnVuY3Rpb24oKXt1Lm5leHRUaWNrKGEpfTtlbHNlIGlmKGkpe3ZhciBzPSEwLGw9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7bmV3IGkoYSkub2JzZXJ2ZShsLHtjaGFyYWN0ZXJEYXRhOiEwfSksZT1mdW5jdGlvbigpe2wuZGF0YT1zPSFzfX1lbHNlIGlmKGMmJmMucmVzb2x2ZSl7dmFyIHA9Yy5yZXNvbHZlKCk7ZT1mdW5jdGlvbigpe3AudGhlbihhKX19ZWxzZSBlPWZ1bmN0aW9uKCl7by5jYWxsKHIsYSl9O3JldHVybiBmdW5jdGlvbihyKXt2YXIgbz17Zm46cixuZXh0OnZvaWQgMH07biYmKG4ubmV4dD1vKSx0fHwodD1vLGUoKSksbj1vfX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDE1KSxvPWUoMjYpLGk9ZSgxOCksdT1lKDQ0KSxjPWUoMzYpLGY9T2JqZWN0LmFzc2lnbjt0LmV4cG9ydHM9IWZ8fGUoMTIpKGZ1bmN0aW9uKCl7dmFyIHQ9e30sbj17fSxlPVN5bWJvbCgpLHI9XCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiO3JldHVybiB0W2VdPTcsci5zcGxpdChcIlwiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09dH0pLDchPWYoe30sdClbZV18fE9iamVjdC5rZXlzKGYoe30sbikpLmpvaW4oXCJcIikhPXJ9KT9mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT11KHQpLGY9YXJndW1lbnRzLmxlbmd0aCxhPTEscz1vLmYsbD1pLmY7Zj5hOylmb3IodmFyIHAsaD1jKGFyZ3VtZW50c1thKytdKSx2PXM/cihoKS5jb25jYXQocyhoKSk6cihoKSx5PXYubGVuZ3RoLGQ9MDt5PmQ7KWwuY2FsbChoLHA9dltkKytdKSYmKGVbcF09aFtwXSk7cmV0dXJuIGV9OmZ9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDUpLG89ZSg2KSxpPWUoMTUpO3QuZXhwb3J0cz1lKDQpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsbil7byh0KTtmb3IodmFyIGUsdT1pKG4pLGM9dS5sZW5ndGgsZj0wO2M+Zjspci5mKHQsZT11W2YrK10sbltlXSk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxOCksbz1lKDE5KSxpPWUoOSksdT1lKDMwKSxjPWUoNyksZj1lKDM1KSxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7bi5mPWUoNCk/YTpmdW5jdGlvbih0LG4pe2lmKHQ9aSh0KSxuPXUobiwhMCksZil0cnl7cmV0dXJuIGEodCxuKX1jYXRjaChlKXt9aWYoYyh0LG4pKXJldHVybiBvKCFyLmYuY2FsbCh0LG4pLHRbbl0pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoOSksbz1lKDM5KS5mLGk9e30udG9TdHJpbmcsdT1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W10sYz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIG8odCl9Y2F0Y2gobil7cmV0dXJuIHUuc2xpY2UoKX19O3QuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiB1JiZcIltvYmplY3QgV2luZG93XVwiPT1pLmNhbGwodCk/Yyh0KTpvKHIodCkpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNyksbz1lKDQ0KSxpPWUoMjcpKFwiSUVfUFJPVE9cIiksdT1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHQpe3JldHVybiB0PW8odCkscih0LGkpP3RbaV06XCJmdW5jdGlvblwiPT10eXBlb2YgdC5jb25zdHJ1Y3RvciYmdCBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIE9iamVjdD91Om51bGx9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe2Zvcih2YXIgbyBpbiBuKWUmJnRbb10/dFtvXT1uW29dOnIodCxvLG5bb10pO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMiksbz1lKDMpLGk9ZSg1KSx1PWUoNCksYz1lKDEpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2Ygb1t0XT9vW3RdOnJbdF07dSYmbiYmIW5bY10mJmkuZihuLGMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDYpLG89ZSgyMiksaT1lKDEpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgZSx1PXIodCkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PXV8fHZvaWQgMD09KGU9cih1KVtpXSk/bjpvKGUpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjkpLG89ZSgyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciBpLHUsYz1TdHJpbmcobyhuKSksZj1yKGUpLGE9Yy5sZW5ndGg7cmV0dXJuIGY8MHx8Zj49YT90P1wiXCI6dm9pZCAwOihpPWMuY2hhckNvZGVBdChmKSxpPDU1Mjk2fHxpPjU2MzE5fHxmKzE9PT1hfHwodT1jLmNoYXJDb2RlQXQoZisxKSk8NTYzMjB8fHU+NTczNDM/dD9jLmNoYXJBdChmKTppOnQ/Yy5zbGljZShmLGYrMik6KGktNTUyOTY8PDEwKSsodS01NjMyMCkrNjU1MzYpfX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI5KSxvPU1hdGgubWF4LGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9cih0KSx0PDA/byh0K24sMCk6aSh0LG4pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzMpLG89ZSgxKShcIml0ZXJhdG9yXCIpLGk9ZSgxNCk7dC5leHBvcnRzPWUoMykuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24odCl7aWYodm9pZCAwIT10KXJldHVybiB0W29dfHx0W1wiQEBpdGVyYXRvclwiXXx8aVtyKHQpXX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDYzKSxvPWUoNzQpLGk9ZSgxNCksdT1lKDkpO3QuZXhwb3J0cz1lKDM3KShBcnJheSxcIkFycmF5XCIsZnVuY3Rpb24odCxuKXt0aGlzLl90PXUodCksdGhpcy5faT0wLHRoaXMuX2s9bn0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90LG49dGhpcy5fayxlPXRoaXMuX2krKztyZXR1cm4hdHx8ZT49dC5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLG8oMSkpOlwia2V5c1wiPT1uP28oMCxlKTpcInZhbHVlc1wiPT1uP28oMCx0W2VdKTpvKDAsW2UsdFtlXV0pfSxcInZhbHVlc1wiKSxpLkFyZ3VtZW50cz1pLkFycmF5LHIoXCJrZXlzXCIpLHIoXCJ2YWx1ZXNcIikscihcImVudHJpZXNcIil9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDExKTtyKHIuUytyLkYsXCJPYmplY3RcIix7YXNzaWduOmUoNzgpfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDExKTtyKHIuUytyLkYqIWUoNCksXCJPYmplY3RcIix7ZGVmaW5lUHJvcGVydHk6ZSg1KS5mfSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcixvLGksdT1lKDE3KSxjPWUoMiksZj1lKDE2KSxhPWUoMzMpLHM9ZSgxMSksbD1lKDEzKSxwPWUoMjIpLGg9ZSg2NCksdj1lKDY3KSx5PWUoODUpLGQ9ZSg0Mikuc2V0LGc9ZSg3NykoKSxtPVwiUHJvbWlzZVwiLHc9Yy5UeXBlRXJyb3IseD1jLnByb2Nlc3MsYj1jW21dLHg9Yy5wcm9jZXNzLF89XCJwcm9jZXNzXCI9PWEoeCksTz1mdW5jdGlvbigpe30saj0hIWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWIucmVzb2x2ZSgxKSxuPSh0LmNvbnN0cnVjdG9yPXt9KVtlKDEpKFwic3BlY2llc1wiKV09ZnVuY3Rpb24odCl7dChPLE8pfTtyZXR1cm4oX3x8XCJmdW5jdGlvblwiPT10eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50KSYmdC50aGVuKE8paW5zdGFuY2VvZiBufWNhdGNoKHIpe319KCksUz1mdW5jdGlvbih0LG4pe3JldHVybiB0PT09bnx8dD09PWImJm49PT1pfSxFPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiEoIWwodCl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mKG49dC50aGVuKSkmJm59LFQ9ZnVuY3Rpb24odCl7cmV0dXJuIFMoYix0KT9uZXcgUCh0KTpuZXcgbyh0KX0sUD1vPWZ1bmN0aW9uKHQpe3ZhciBuLGU7dGhpcy5wcm9taXNlPW5ldyB0KGZ1bmN0aW9uKHQscil7aWYodm9pZCAwIT09bnx8dm9pZCAwIT09ZSl0aHJvdyB3KFwiQmFkIFByb21pc2UgY29uc3RydWN0b3JcIik7bj10LGU9cn0pLHRoaXMucmVzb2x2ZT1wKG4pLHRoaXMucmVqZWN0PXAoZSl9LGs9ZnVuY3Rpb24odCl7dHJ5e3QoKX1jYXRjaChuKXtyZXR1cm57ZXJyb3I6bn19fSxMPWZ1bmN0aW9uKHQsbil7aWYoIXQuX24pe3QuX249ITA7dmFyIGU9dC5fYztnKGZ1bmN0aW9uKCl7Zm9yKHZhciByPXQuX3Ysbz0xPT10Ll9zLGk9MCx1PWZ1bmN0aW9uKG4pe3ZhciBlLGksdT1vP24ub2s6bi5mYWlsLGM9bi5yZXNvbHZlLGY9bi5yZWplY3QsYT1uLmRvbWFpbjt0cnl7dT8ob3x8KDI9PXQuX2gmJk4odCksdC5faD0xKSx1PT09ITA/ZT1yOihhJiZhLmVudGVyKCksZT11KHIpLGEmJmEuZXhpdCgpKSxlPT09bi5wcm9taXNlP2YodyhcIlByb21pc2UtY2hhaW4gY3ljbGVcIikpOihpPUUoZSkpP2kuY2FsbChlLGMsZik6YyhlKSk6ZihyKX1jYXRjaChzKXtmKHMpfX07ZS5sZW5ndGg+aTspdShlW2krK10pO3QuX2M9W10sdC5fbj0hMSxuJiYhdC5faCYmTSh0KX0pfX0sTT1mdW5jdGlvbih0KXtkLmNhbGwoYyxmdW5jdGlvbigpe3ZhciBuLGUscixvPXQuX3Y7aWYoRih0KSYmKG49ayhmdW5jdGlvbigpe18/eC5lbWl0KFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsbyx0KTooZT1jLm9udW5oYW5kbGVkcmVqZWN0aW9uKT9lKHtwcm9taXNlOnQscmVhc29uOm99KToocj1jLmNvbnNvbGUpJiZyLmVycm9yJiZyLmVycm9yKFwiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXCIsbyl9KSx0Ll9oPV98fEYodCk/MjoxKSx0Ll9hPXZvaWQgMCxuKXRocm93IG4uZXJyb3J9KX0sRj1mdW5jdGlvbih0KXtpZigxPT10Ll9oKXJldHVybiExO2Zvcih2YXIgbixlPXQuX2F8fHQuX2Mscj0wO2UubGVuZ3RoPnI7KWlmKG49ZVtyKytdLG4uZmFpbHx8IUYobi5wcm9taXNlKSlyZXR1cm4hMTtyZXR1cm4hMH0sTj1mdW5jdGlvbih0KXtkLmNhbGwoYyxmdW5jdGlvbigpe3ZhciBuO18/eC5lbWl0KFwicmVqZWN0aW9uSGFuZGxlZFwiLHQpOihuPWMub25yZWplY3Rpb25oYW5kbGVkKSYmbih7cHJvbWlzZTp0LHJlYXNvbjp0Ll92fSl9KX0sQT1mdW5jdGlvbih0KXt2YXIgbj10aGlzO24uX2R8fChuLl9kPSEwLG49bi5fd3x8bixuLl92PXQsbi5fcz0yLG4uX2F8fChuLl9hPW4uX2Muc2xpY2UoKSksTChuLCEwKSl9LFI9ZnVuY3Rpb24odCl7dmFyIG4sZT10aGlzO2lmKCFlLl9kKXtlLl9kPSEwLGU9ZS5fd3x8ZTt0cnl7aWYoZT09PXQpdGhyb3cgdyhcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpOyhuPUUodCkpP2coZnVuY3Rpb24oKXt2YXIgcj17X3c6ZSxfZDohMX07dHJ5e24uY2FsbCh0LGYoUixyLDEpLGYoQSxyLDEpKX1jYXRjaChvKXtBLmNhbGwocixvKX19KTooZS5fdj10LGUuX3M9MSxMKGUsITEpKX1jYXRjaChyKXtBLmNhbGwoe193OmUsX2Q6ITF9LHIpfX19O2p8fChiPWZ1bmN0aW9uKHQpe2godGhpcyxiLG0sXCJfaFwiKSxwKHQpLHIuY2FsbCh0aGlzKTt0cnl7dChmKFIsdGhpcywxKSxmKEEsdGhpcywxKSl9Y2F0Y2gobil7QS5jYWxsKHRoaXMsbil9fSxyPWZ1bmN0aW9uKHQpe3RoaXMuX2M9W10sdGhpcy5fYT12b2lkIDAsdGhpcy5fcz0wLHRoaXMuX2Q9ITEsdGhpcy5fdj12b2lkIDAsdGhpcy5faD0wLHRoaXMuX249ITF9LHIucHJvdG90eXBlPWUoODMpKGIucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uKHQsbil7dmFyIGU9VCh5KHRoaXMsYikpO3JldHVybiBlLm9rPVwiZnVuY3Rpb25cIiE9dHlwZW9mIHR8fHQsZS5mYWlsPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4sZS5kb21haW49Xz94LmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKGUpLHRoaXMuX2EmJnRoaXMuX2EucHVzaChlKSx0aGlzLl9zJiZMKHRoaXMsITEpLGUucHJvbWlzZX0sXCJjYXRjaFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pLFA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcjt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9ZihSLHQsMSksdGhpcy5yZWplY3Q9ZihBLHQsMSl9KSxzKHMuRytzLlcrcy5GKiFqLHtQcm9taXNlOmJ9KSxlKDIwKShiLG0pLGUoODQpKG0pLGk9ZSgzKVttXSxzKHMuUytzLkYqIWosbSx7cmVqZWN0OmZ1bmN0aW9uKHQpe3ZhciBuPVQodGhpcyksZT1uLnJlamVjdDtyZXR1cm4gZSh0KSxuLnByb21pc2V9fSkscyhzLlMrcy5GKih1fHwhaiksbSx7cmVzb2x2ZTpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgYiYmUyh0LmNvbnN0cnVjdG9yLHRoaXMpKXJldHVybiB0O3ZhciBuPVQodGhpcyksZT1uLnJlc29sdmU7cmV0dXJuIGUodCksbi5wcm9taXNlfX0pLHMocy5TK3MuRiohKGomJmUoNzMpKGZ1bmN0aW9uKHQpe2IuYWxsKHQpW1wiY2F0Y2hcIl0oTyl9KSksbSx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMsZT1UKG4pLHI9ZS5yZXNvbHZlLG89ZS5yZWplY3QsaT1rKGZ1bmN0aW9uKCl7dmFyIGU9W10saT0wLHU9MTt2KHQsITEsZnVuY3Rpb24odCl7dmFyIGM9aSsrLGY9ITE7ZS5wdXNoKHZvaWQgMCksdSsrLG4ucmVzb2x2ZSh0KS50aGVuKGZ1bmN0aW9uKHQpe2Z8fChmPSEwLGVbY109dCwtLXV8fHIoZSkpfSxvKX0pLC0tdXx8cihlKX0pO3JldHVybiBpJiZvKGkuZXJyb3IpLGUucHJvbWlzZX0scmFjZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLGU9VChuKSxyPWUucmVqZWN0LG89ayhmdW5jdGlvbigpe3YodCwhMSxmdW5jdGlvbih0KXtuLnJlc29sdmUodCkudGhlbihlLnJlc29sdmUscil9KX0pO3JldHVybiBvJiZyKG8uZXJyb3IpLGUucHJvbWlzZX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMiksbz1lKDcpLGk9ZSg0KSx1PWUoMTEpLGM9ZSg0MSksZj1lKDc2KS5LRVksYT1lKDEyKSxzPWUoMjgpLGw9ZSgyMCkscD1lKDIxKSxoPWUoMSksdj1lKDMyKSx5PWUoMzEpLGQ9ZSg3NSksZz1lKDY2KSxtPWUoNzApLHc9ZSg2KSx4PWUoOSksYj1lKDMwKSxfPWUoMTkpLE89ZSgzOCksaj1lKDgxKSxTPWUoODApLEU9ZSg1KSxUPWUoMTUpLFA9Uy5mLGs9RS5mLEw9ai5mLE09ci5TeW1ib2wsRj1yLkpTT04sTj1GJiZGLnN0cmluZ2lmeSxBPVwicHJvdG90eXBlXCIsUj1oKFwiX2hpZGRlblwiKSxJPWgoXCJ0b1ByaW1pdGl2ZVwiKSxDPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLEc9cyhcInN5bWJvbC1yZWdpc3RyeVwiKSxXPXMoXCJzeW1ib2xzXCIpLFU9cyhcIm9wLXN5bWJvbHNcIiksRD1PYmplY3RbQV0sSz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBNLEI9ci5RT2JqZWN0LEo9IUJ8fCFCW0FdfHwhQltBXS5maW5kQ2hpbGQsWT1pJiZhKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU8oayh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxcImFcIix7dmFsdWU6N30pLmF9fSkpLmF9KT9mdW5jdGlvbih0LG4sZSl7dmFyIHI9UChELG4pO3ImJmRlbGV0ZSBEW25dLGsodCxuLGUpLHImJnQhPT1EJiZrKEQsbixyKX06ayxxPWZ1bmN0aW9uKHQpe3ZhciBuPVdbdF09TyhNW0FdKTtyZXR1cm4gbi5faz10LG59LHo9SyYmXCJzeW1ib2xcIj09dHlwZW9mIE0uaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTX0sSD1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQ9PT1EJiZIKFUsbixlKSx3KHQpLG49YihuLCEwKSx3KGUpLG8oVyxuKT8oZS5lbnVtZXJhYmxlPyhvKHQsUikmJnRbUl1bbl0mJih0W1JdW25dPSExKSxlPU8oZSx7ZW51bWVyYWJsZTpfKDAsITEpfSkpOihvKHQsUil8fGsodCxSLF8oMSx7fSkpLHRbUl1bbl09ITApLFkodCxuLGUpKTprKHQsbixlKX0sVj1mdW5jdGlvbih0LG4pe3codCk7Zm9yKHZhciBlLHI9ZyhuPXgobikpLG89MCxpPXIubGVuZ3RoO2k+bzspSCh0LGU9cltvKytdLG5bZV0pO3JldHVybiB0fSxRPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHZvaWQgMD09PW4/Tyh0KTpWKE8odCksbil9LFg9ZnVuY3Rpb24odCl7dmFyIG49Qy5jYWxsKHRoaXMsdD1iKHQsITApKTtyZXR1cm4hKHRoaXM9PT1EJiZvKFcsdCkmJiFvKFUsdCkpJiYoIShufHwhbyh0aGlzLHQpfHwhbyhXLHQpfHxvKHRoaXMsUikmJnRoaXNbUl1bdF0pfHxuKX0sJD1mdW5jdGlvbih0LG4pe2lmKHQ9eCh0KSxuPWIobiwhMCksdCE9PUR8fCFvKFcsbil8fG8oVSxuKSl7dmFyIGU9UCh0LG4pO3JldHVybiFlfHwhbyhXLG4pfHxvKHQsUikmJnRbUl1bbl18fChlLmVudW1lcmFibGU9ITApLGV9fSxaPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPUwoeCh0KSkscj1bXSxpPTA7ZS5sZW5ndGg+aTspbyhXLG49ZVtpKytdKXx8bj09Unx8bj09Znx8ci5wdXNoKG4pO3JldHVybiByfSx0dD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZT10PT09RCxyPUwoZT9VOngodCkpLGk9W10sdT0wO3IubGVuZ3RoPnU7KSFvKFcsbj1yW3UrK10pfHxlJiYhbyhELG4pfHxpLnB1c2goV1tuXSk7cmV0dXJuIGl9O0t8fChNPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIE0pdGhyb3cgVHlwZUVycm9yKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIVwiKTt2YXIgdD1wKGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKSxuPWZ1bmN0aW9uKGUpe3RoaXM9PT1EJiZuLmNhbGwoVSxlKSxvKHRoaXMsUikmJm8odGhpc1tSXSx0KSYmKHRoaXNbUl1bdF09ITEpLFkodGhpcyx0LF8oMSxlKSl9O3JldHVybiBpJiZKJiZZKEQsdCx7Y29uZmlndXJhYmxlOiEwLHNldDpufSkscSh0KX0sYyhNW0FdLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSksUy5mPSQsRS5mPUgsZSgzOSkuZj1qLmY9WixlKDE4KS5mPVgsZSgyNikuZj10dCxpJiYhZSgxNykmJmMoRCxcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsWCwhMCksdi5mPWZ1bmN0aW9uKHQpe3JldHVybiBxKGgodCkpfSksdSh1LkcrdS5XK3UuRiohSyx7U3ltYm9sOk19KTtmb3IodmFyIG50PVwiaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXNcIi5zcGxpdChcIixcIiksZXQ9MDtudC5sZW5ndGg+ZXQ7KWgobnRbZXQrK10pO2Zvcih2YXIgbnQ9VChoLnN0b3JlKSxldD0wO250Lmxlbmd0aD5ldDspeShudFtldCsrXSk7dSh1LlMrdS5GKiFLLFwiU3ltYm9sXCIse1wiZm9yXCI6ZnVuY3Rpb24odCl7cmV0dXJuIG8oRyx0Kz1cIlwiKT9HW3RdOkdbdF09TSh0KX0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKHoodCkpcmV0dXJuIGQoRyx0KTt0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBzeW1ib2whXCIpfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtKPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtKPSExfX0pLHUodS5TK3UuRiohSyxcIk9iamVjdFwiLHtjcmVhdGU6USxkZWZpbmVQcm9wZXJ0eTpILGRlZmluZVByb3BlcnRpZXM6VixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6JCxnZXRPd25Qcm9wZXJ0eU5hbWVzOlosZ2V0T3duUHJvcGVydHlTeW1ib2xzOnR0fSksRiYmdSh1LlMrdS5GKighS3x8YShmdW5jdGlvbigpe3ZhciB0PU0oKTtyZXR1cm5cIltudWxsXVwiIT1OKFt0XSl8fFwie31cIiE9Tih7YTp0fSl8fFwie31cIiE9TihPYmplY3QodCkpfSkpLFwiSlNPTlwiLHtzdHJpbmdpZnk6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dCYmIXoodCkpe2Zvcih2YXIgbixlLHI9W3RdLG89MTthcmd1bWVudHMubGVuZ3RoPm87KXIucHVzaChhcmd1bWVudHNbbysrXSk7cmV0dXJuIG49clsxXSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYoZT1uKSwhZSYmbShuKXx8KG49ZnVuY3Rpb24odCxuKXtpZihlJiYobj1lLmNhbGwodGhpcyx0LG4pKSwheihuKSlyZXR1cm4gbn0pLHJbMV09bixOLmFwcGx5KEYscil9fX0pLE1bQV1bSV18fGUoOCkoTVtBXSxJLE1bQV0udmFsdWVPZiksbChNLFwiU3ltYm9sXCIpLGwoTWF0aCxcIk1hdGhcIiwhMCksbChyLkpTT04sXCJKU09OXCIsITApfSxmdW5jdGlvbih0LG4sZSl7ZSgzMSkoXCJhc3luY0l0ZXJhdG9yXCIpfSxmdW5jdGlvbih0LG4sZSl7ZSgzMSkoXCJvYnNlcnZhYmxlXCIpfSxmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIHIoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gbyh0KXtpZihzPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChzPT09ZXx8IXMpJiZzZXRUaW1lb3V0KXJldHVybiBzPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gcyh0LDApfWNhdGNoKG4pe3RyeXtyZXR1cm4gcy5jYWxsKG51bGwsdCwwKX1jYXRjaChuKXtyZXR1cm4gcy5jYWxsKHRoaXMsdCwwKX19fWZ1bmN0aW9uIGkodCl7aWYobD09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChsPT09cnx8IWwpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGw9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7cmV0dXJuIGwodCl9Y2F0Y2gobil7dHJ5e3JldHVybiBsLmNhbGwobnVsbCx0KX1jYXRjaChuKXtyZXR1cm4gbC5jYWxsKHRoaXMsdCl9fX1mdW5jdGlvbiB1KCl7eSYmaCYmKHk9ITEsaC5sZW5ndGg/dj1oLmNvbmNhdCh2KTpkPS0xLHYubGVuZ3RoJiZjKCkpfWZ1bmN0aW9uIGMoKXtpZigheSl7dmFyIHQ9byh1KTt5PSEwO2Zvcih2YXIgbj12Lmxlbmd0aDtuOyl7Zm9yKGg9dix2PVtdOysrZDxuOyloJiZoW2RdLnJ1bigpO2Q9LTEsbj12Lmxlbmd0aH1oPW51bGwseT0hMSxpKHQpfX1mdW5jdGlvbiBmKHQsbil7dGhpcy5mdW49dCx0aGlzLmFycmF5PW59ZnVuY3Rpb24gYSgpe312YXIgcyxsLHA9dC5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtzPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDplfWNhdGNoKHQpe3M9ZX10cnl7bD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnJ9Y2F0Y2godCl7bD1yfX0oKTt2YXIgaCx2PVtdLHk9ITEsZD0tMTtwLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKW5bZS0xXT1hcmd1bWVudHNbZV07di5wdXNoKG5ldyBmKHQsbikpLDEhPT12Lmxlbmd0aHx8eXx8byhjKX0sZi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0scC50aXRsZT1cImJyb3dzZXJcIixwLmJyb3dzZXI9ITAscC5lbnY9e30scC5hcmd2PVtdLHAudmVyc2lvbj1cIlwiLHAudmVyc2lvbnM9e30scC5vbj1hLHAuYWRkTGlzdGVuZXI9YSxwLm9uY2U9YSxwLm9mZj1hLHAucmVtb3ZlTGlzdGVuZXI9YSxwLnJlbW92ZUFsbExpc3RlbmVycz1hLHAuZW1pdD1hLHAuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0scC5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0scC5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LHAudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKHQsbixlKXsoZnVuY3Rpb24obil7dmFyIHI9XCJvYmplY3RcIj09dHlwZW9mIG4/bjpcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsbz1yLnJlZ2VuZXJhdG9yUnVudGltZSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocikuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKT49MCxpPW8mJnIucmVnZW5lcmF0b3JSdW50aW1lO2lmKHIucmVnZW5lcmF0b3JSdW50aW1lPXZvaWQgMCx0LmV4cG9ydHM9ZSg5OCksbylyLnJlZ2VuZXJhdG9yUnVudGltZT1pO2Vsc2UgdHJ5e2RlbGV0ZSByLnJlZ2VuZXJhdG9yUnVudGltZX1jYXRjaCh1KXtyLnJlZ2VuZXJhdG9yUnVudGltZT12b2lkIDB9fSkuY2FsbChuLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbih0LG4sZSl7KGZ1bmN0aW9uKG4sZSl7IWZ1bmN0aW9uKG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCxuLGUscil7dmFyIG89T2JqZWN0LmNyZWF0ZSgobnx8aSkucHJvdG90eXBlKSx1PW5ldyB2KHJ8fFtdKTtyZXR1cm4gby5faW52b2tlPWwodCxlLHUpLG99ZnVuY3Rpb24gbyh0LG4sZSl7dHJ5e3JldHVybnt0eXBlOlwibm9ybWFsXCIsYXJnOnQuY2FsbChuLGUpfX1jYXRjaChyKXtyZXR1cm57dHlwZTpcInRocm93XCIsYXJnOnJ9fX1mdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIHUoKXt9ZnVuY3Rpb24gYygpe31mdW5jdGlvbiBmKHQpe1tcIm5leHRcIixcInRocm93XCIsXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihuKXt0W25dPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2Uobix0KX19KX1mdW5jdGlvbiBhKHQpe3RoaXMuYXJnPXR9ZnVuY3Rpb24gcyh0KXtmdW5jdGlvbiBuKGUscixpLHUpe3ZhciBjPW8odFtlXSx0LHIpO2lmKFwidGhyb3dcIiE9PWMudHlwZSl7dmFyIGY9Yy5hcmcscz1mLnZhbHVlO3JldHVybiBzIGluc3RhbmNlb2YgYT9Qcm9taXNlLnJlc29sdmUocy5hcmcpLnRoZW4oZnVuY3Rpb24odCl7bihcIm5leHRcIix0LGksdSl9LGZ1bmN0aW9uKHQpe24oXCJ0aHJvd1wiLHQsaSx1KX0pOlByb21pc2UucmVzb2x2ZShzKS50aGVuKGZ1bmN0aW9uKHQpe2YudmFsdWU9dCxpKGYpfSx1KX11KGMuYXJnKX1mdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLG8pe24odCxlLHIsbyl9KX1yZXR1cm4gaT1pP2kudGhlbihyLHIpOnIoKX1cIm9iamVjdFwiPT10eXBlb2YgZSYmZS5kb21haW4mJihuPWUuZG9tYWluLmJpbmQobikpO3ZhciBpO3RoaXMuX2ludm9rZT1yfWZ1bmN0aW9uIGwodCxuLGUpe3ZhciByPWo7cmV0dXJuIGZ1bmN0aW9uKGksdSl7aWYocj09PUUpdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtpZihyPT09VCl7aWYoXCJ0aHJvd1wiPT09aSl0aHJvdyB1O3JldHVybiBkKCl9Zm9yKDs7KXt2YXIgYz1lLmRlbGVnYXRlO2lmKGMpe2lmKFwicmV0dXJuXCI9PT1pfHxcInRocm93XCI9PT1pJiZjLml0ZXJhdG9yW2ldPT09Zyl7ZS5kZWxlZ2F0ZT1udWxsO3ZhciBmPWMuaXRlcmF0b3JbXCJyZXR1cm5cIl07aWYoZil7dmFyIGE9byhmLGMuaXRlcmF0b3IsdSk7aWYoXCJ0aHJvd1wiPT09YS50eXBlKXtpPVwidGhyb3dcIix1PWEuYXJnO2NvbnRpbnVlfX1pZihcInJldHVyblwiPT09aSljb250aW51ZX12YXIgYT1vKGMuaXRlcmF0b3JbaV0sYy5pdGVyYXRvcix1KTtpZihcInRocm93XCI9PT1hLnR5cGUpe2UuZGVsZWdhdGU9bnVsbCxpPVwidGhyb3dcIix1PWEuYXJnO2NvbnRpbnVlfWk9XCJuZXh0XCIsdT1nO3ZhciBzPWEuYXJnO2lmKCFzLmRvbmUpcmV0dXJuIHI9UyxzO2VbYy5yZXN1bHROYW1lXT1zLnZhbHVlLGUubmV4dD1jLm5leHRMb2MsZS5kZWxlZ2F0ZT1udWxsfWlmKFwibmV4dFwiPT09aSllLnNlbnQ9ZS5fc2VudD11O2Vsc2UgaWYoXCJ0aHJvd1wiPT09aSl7aWYocj09PWopdGhyb3cgcj1ULHU7ZS5kaXNwYXRjaEV4Y2VwdGlvbih1KSYmKGk9XCJuZXh0XCIsdT1nKX1lbHNlXCJyZXR1cm5cIj09PWkmJmUuYWJydXB0KFwicmV0dXJuXCIsdSk7cj1FO3ZhciBhPW8odCxuLGUpO2lmKFwibm9ybWFsXCI9PT1hLnR5cGUpe3I9ZS5kb25lP1Q6Uzt2YXIgcz17dmFsdWU6YS5hcmcsZG9uZTplLmRvbmV9O2lmKGEuYXJnIT09UClyZXR1cm4gcztlLmRlbGVnYXRlJiZcIm5leHRcIj09PWkmJih1PWcpfWVsc2VcInRocm93XCI9PT1hLnR5cGUmJihyPVQsaT1cInRocm93XCIsdT1hLmFyZyl9fX1mdW5jdGlvbiBwKHQpe3ZhciBuPXt0cnlMb2M6dFswXX07MSBpbiB0JiYobi5jYXRjaExvYz10WzFdKSwyIGluIHQmJihuLmZpbmFsbHlMb2M9dFsyXSxuLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKG4pfWZ1bmN0aW9uIGgodCl7dmFyIG49dC5jb21wbGV0aW9ufHx7fTtuLnR5cGU9XCJub3JtYWxcIixkZWxldGUgbi5hcmcsdC5jb21wbGV0aW9uPW59ZnVuY3Rpb24gdih0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6XCJyb290XCJ9XSx0LmZvckVhY2gocCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiB5KHQpe2lmKHQpe3ZhciBuPXRbeF07aWYobilyZXR1cm4gbi5jYWxsKHQpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgZT0tMSxyPWZ1bmN0aW9uIG8oKXtmb3IoOysrZTx0Lmxlbmd0aDspaWYobS5jYWxsKHQsZSkpcmV0dXJuIG8udmFsdWU9dFtlXSxvLmRvbmU9ITEsbztyZXR1cm4gby52YWx1ZT1nLG8uZG9uZT0hMCxvfTtyZXR1cm4gci5uZXh0PXJ9fXJldHVybntuZXh0OmR9fWZ1bmN0aW9uIGQoKXtyZXR1cm57dmFsdWU6Zyxkb25lOiEwfX12YXIgZyxtPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LHg9dy5pdGVyYXRvcnx8XCJAQGl0ZXJhdG9yXCIsYj13LnRvU3RyaW5nVGFnfHxcIkBAdG9TdHJpbmdUYWdcIixfPVwib2JqZWN0XCI9PXR5cGVvZiB0LE89bi5yZWdlbmVyYXRvclJ1bnRpbWU7aWYoTylyZXR1cm4gdm9pZChfJiYodC5leHBvcnRzPU8pKTtPPW4ucmVnZW5lcmF0b3JSdW50aW1lPV8/dC5leHBvcnRzOnt9LE8ud3JhcD1yO3ZhciBqPVwic3VzcGVuZGVkU3RhcnRcIixTPVwic3VzcGVuZGVkWWllbGRcIixFPVwiZXhlY3V0aW5nXCIsVD1cImNvbXBsZXRlZFwiLFA9e30saz1jLnByb3RvdHlwZT1pLnByb3RvdHlwZTt1LnByb3RvdHlwZT1rLmNvbnN0cnVjdG9yPWMsYy5jb25zdHJ1Y3Rvcj11LGNbYl09dS5kaXNwbGF5TmFtZT1cIkdlbmVyYXRvckZ1bmN0aW9uXCIsTy5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFuJiYobj09PXV8fFwiR2VuZXJhdG9yRnVuY3Rpb25cIj09PShuLmRpc3BsYXlOYW1lfHxuLm5hbWUpKX0sTy5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsYyk6KHQuX19wcm90b19fPWMsYiBpbiB0fHwodFtiXT1cIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGspLHR9LE8uYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHQpfSxmKHMucHJvdG90eXBlKSxPLmFzeW5jPWZ1bmN0aW9uKHQsbixlLG8pe3ZhciBpPW5ldyBzKHIodCxuLGUsbykpO3JldHVybiBPLmlzR2VuZXJhdG9yRnVuY3Rpb24obik/aTppLm5leHQoKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTppLm5leHQoKX0pfSxmKGspLGtbeF09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sa1tiXT1cIkdlbmVyYXRvclwiLGsudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgR2VuZXJhdG9yXVwifSxPLmtleXM9ZnVuY3Rpb24odCl7dmFyIG49W107Zm9yKHZhciBlIGluIHQpbi5wdXNoKGUpO3JldHVybiBuLnJldmVyc2UoKSxmdW5jdGlvbiByKCl7Zm9yKDtuLmxlbmd0aDspe3ZhciBlPW4ucG9wKCk7aWYoZSBpbiB0KXJldHVybiByLnZhbHVlPWUsci5kb25lPSExLHJ9cmV0dXJuIHIuZG9uZT0hMCxcbnJ9fSxPLnZhbHVlcz15LHYucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2LHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PWcsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChoKSwhdClmb3IodmFyIG4gaW4gdGhpcylcInRcIj09PW4uY2hhckF0KDApJiZtLmNhbGwodGhpcyxuKSYmIWlzTmFOKCtuLnNsaWNlKDEpKSYmKHRoaXNbbl09Zyl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLG49dC5jb21wbGV0aW9uO2lmKFwidGhyb3dcIj09PW4udHlwZSl0aHJvdyBuLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4scil7cmV0dXJuIGkudHlwZT1cInRocm93XCIsaS5hcmc9dCxlLm5leHQ9biwhIXJ9aWYodGhpcy5kb25lKXRocm93IHQ7Zm9yKHZhciBlPXRoaXMscj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7cj49MDstLXIpe3ZhciBvPXRoaXMudHJ5RW50cmllc1tyXSxpPW8uY29tcGxldGlvbjtpZihcInJvb3RcIj09PW8udHJ5TG9jKXJldHVybiBuKFwiZW5kXCIpO2lmKG8udHJ5TG9jPD10aGlzLnByZXYpe3ZhciB1PW0uY2FsbChvLFwiY2F0Y2hMb2NcIiksYz1tLmNhbGwobyxcImZpbmFsbHlMb2NcIik7aWYodSYmYyl7aWYodGhpcy5wcmV2PG8uY2F0Y2hMb2MpcmV0dXJuIG4oby5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PG8uZmluYWxseUxvYylyZXR1cm4gbihvLmZpbmFsbHlMb2MpfWVsc2UgaWYodSl7aWYodGhpcy5wcmV2PG8uY2F0Y2hMb2MpcmV0dXJuIG4oby5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtpZih0aGlzLnByZXY8by5maW5hbGx5TG9jKXJldHVybiBuKG8uZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYzw9dGhpcy5wcmV2JiZtLmNhbGwocixcImZpbmFsbHlMb2NcIikmJnRoaXMucHJldjxyLmZpbmFsbHlMb2Mpe3ZhciBvPXI7YnJlYWt9fW8mJihcImJyZWFrXCI9PT10fHxcImNvbnRpbnVlXCI9PT10KSYmby50cnlMb2M8PW4mJm48PW8uZmluYWxseUxvYyYmKG89bnVsbCk7dmFyIGk9bz9vLmNvbXBsZXRpb246e307cmV0dXJuIGkudHlwZT10LGkuYXJnPW4sbz90aGlzLm5leHQ9by5maW5hbGx5TG9jOnRoaXMuY29tcGxldGUoaSksUH0sY29tcGxldGU6ZnVuY3Rpb24odCxuKXtpZihcInRocm93XCI9PT10LnR5cGUpdGhyb3cgdC5hcmc7XCJicmVha1wiPT09dC50eXBlfHxcImNvbnRpbnVlXCI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOlwicmV0dXJuXCI9PT10LnR5cGU/KHRoaXMucnZhbD10LmFyZyx0aGlzLm5leHQ9XCJlbmRcIik6XCJub3JtYWxcIj09PXQudHlwZSYmbiYmKHRoaXMubmV4dD1uKX0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBlPXRoaXMudHJ5RW50cmllc1tuXTtpZihlLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKGUuY29tcGxldGlvbixlLmFmdGVyTG9jKSxoKGUpLFB9fSxcImNhdGNoXCI6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGU9dGhpcy50cnlFbnRyaWVzW25dO2lmKGUudHJ5TG9jPT09dCl7dmFyIHI9ZS5jb21wbGV0aW9uO2lmKFwidGhyb3dcIj09PXIudHlwZSl7dmFyIG89ci5hcmc7aChlKX1yZXR1cm4gb319dGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6eSh0KSxyZXN1bHROYW1lOm4sbmV4dExvYzplfSxQfX19KFwib2JqZWN0XCI9PXR5cGVvZiBuP246XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJvYmplY3RcIj09dHlwZW9mIHNlbGY/c2VsZjp0aGlzKX0pLmNhbGwobixmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpLGUoOTYpKX1dKTsiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLy8gVGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IG5lZWRzIHRvIGJlXG4vLyBrZXB0IGlkZW50aWNhbCB0byB0aGUgd2F5IGl0IGlzIG9idGFpbmVkIGluIHJ1bnRpbWUuanNcbnZhciBnID1cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzO1xuXG4vLyBVc2UgYGdldE93blByb3BlcnR5TmFtZXNgIGJlY2F1c2Ugbm90IGFsbCBicm93c2VycyBzdXBwb3J0IGNhbGxpbmdcbi8vIGBoYXNPd25Qcm9wZXJ0eWAgb24gdGhlIGdsb2JhbCBgc2VsZmAgb2JqZWN0IGluIGEgd29ya2VyLiBTZWUgIzE4My5cbnZhciBoYWRSdW50aW1lID0gZy5yZWdlbmVyYXRvclJ1bnRpbWUgJiZcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZykuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKSA+PSAwO1xuXG4vLyBTYXZlIHRoZSBvbGQgcmVnZW5lcmF0b3JSdW50aW1lIGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuXG52YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cbi8vIEZvcmNlIHJlZXZhbHV0YXRpb24gb2YgcnVudGltZS5qcy5cbmcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3J1bnRpbWVcIik7XG5cbmlmIChoYWRSdW50aW1lKSB7XG4gIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJ1bnRpbWUuXG4gIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcbn0gZWxzZSB7XG4gIC8vIFJlbW92ZSB0aGUgZ2xvYmFsIHByb3BlcnR5IGFkZGVkIGJ5IHJ1bnRpbWUuanMuXG4gIHRyeSB7XG4gICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICB9IGNhdGNoKGUpIHtcbiAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBwcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIgfHxcbiAgICAgICAgICAgICAgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiICYmIGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZF0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIC8vIEEgcmV0dXJuIG9yIHRocm93ICh3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gdGhyb3dcbiAgICAgICAgICAgIC8vIG1ldGhvZCkgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICAgIHZhciByZXR1cm5NZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXTtcbiAgICAgICAgICAgIGlmIChyZXR1cm5NZXRob2QpIHtcbiAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKHJldHVybk1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGFyZyk7XG4gICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJldHVybiBtZXRob2QgdGhyZXcgYW4gZXhjZXB0aW9uLCBsZXQgdGhhdFxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBwcmV2YWlsIG92ZXIgdGhlIG9yaWdpbmFsIHJldHVybiBvciB0aHJvdy5cbiAgICAgICAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIG91dGVyIHJldHVybiwgbm93IHRoYXQgdGhlIGRlbGVnYXRlXG4gICAgICAgICAgICAgIC8vIGl0ZXJhdG9yIGhhcyBiZWVuIHRlcm1pbmF0ZWQuXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChcbiAgICAgICAgICAgIGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZF0sXG4gICAgICAgICAgICBkZWxlZ2F0ZS5pdGVyYXRvcixcbiAgICAgICAgICAgIGFyZ1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIExpa2UgcmV0dXJuaW5nIGdlbmVyYXRvci50aHJvdyh1bmNhdWdodCksIGJ1dCB3aXRob3V0IHRoZVxuICAgICAgICAgICAgLy8gb3ZlcmhlYWQgb2YgYW4gZXh0cmEgZnVuY3Rpb24gY2FsbC5cbiAgICAgICAgICAgIG1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZWxlZ2F0ZSBnZW5lcmF0b3IgcmFuIGFuZCBoYW5kbGVkIGl0cyBvd24gZXhjZXB0aW9ucyBzb1xuICAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgbWV0aG9kIHdhcywgd2UgY29udGludWUgYXMgaWYgaXQgaXNcbiAgICAgICAgICAvLyBcIm5leHRcIiB3aXRoIGFuIHVuZGVmaW5lZCBhcmcuXG4gICAgICAgICAgbWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuICAgICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuICAgICAgICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuICAgICAgICAgICAgcmV0dXJuIGluZm87XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGFyZykpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgICAgbWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICB2YXIgaW5mbyA9IHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBpZiAoY29udGV4dC5kZWxlZ2F0ZSAmJiBtZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgICAgICAgYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihhcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgbWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuICAgICAgICByZXR1cm4gISFjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsImV4cG9ydCBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgY29udHJvbFBvc2l0aW9uOiAncmlnaHQnLFxuICAgICAgYXBwZW5kOiBmYWxzZSxcbiAgICAgIGNvbnRyb2xPcmRlcjogW1xuICAgICAgICAnYXV0b2NvbXBsZXRlJyxcbiAgICAgICAgJ2J1dHRvbicsXG4gICAgICAgICdjaGVja2JveCcsXG4gICAgICAgICdjaGVja2JveC1ncm91cCcsXG4gICAgICAgICdkYXRlJyxcbiAgICAgICAgJ2ZpbGUnLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICdwYXJhZ3JhcGgnLFxuICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgJ3JhZGlvLWdyb3VwJyxcbiAgICAgICAgJ3NlbGVjdCcsXG4gICAgICAgICd0ZXh0JyxcbiAgICAgICAgJ3RleHRhcmVhJ1xuICAgICAgXSxcbiAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAvLyBBcnJheSBvZiBmaWVsZHMgdG8gZGlzYWJsZVxuICAgICAgZGlzYWJsZUZpZWxkczogW10sXG4gICAgICBkaXNhYmxlZEF0dHJzOiBbXSxcbiAgICAgIGRpc2FibGVkQWN0aW9uQnV0dG9uczogW10sXG4gICAgICBlZGl0T25BZGQ6IGZhbHNlLFxuICAgICAgLy8gVW5lZGl0YWJsZSBmaWVsZHMgb3Igb3RoZXIgY29udGVudCB5b3Ugd291bGQgbGlrZSB0byBhcHBlYXJcbiAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgcmVndWxhciBmaWVsZHM6XG4gICAgICAvLyBhcnJheSBvZiBvYmplY3RzIHdpdGggZmllbGRzIHZhbHVlc1xuICAgICAgLy8gZXg6XG4gICAgICAvLyBkZWZhdWx0RmllbGRzOiBbe1xuICAgICAgLy8gICBsYWJlbDogJ0ZpcnN0IE5hbWUnLFxuICAgICAgLy8gICBuYW1lOiAnZmlyc3QtbmFtZScsXG4gICAgICAvLyAgIHJlcXVpcmVkOiAndHJ1ZScsXG4gICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnWW91ciBmaXJzdCBuYW1lJyxcbiAgICAgIC8vICAgdHlwZTogJ3RleHQnXG4gICAgICAvLyB9LCB7XG4gICAgICAvLyAgIGxhYmVsOiAnUGhvbmUnLFxuICAgICAgLy8gICBuYW1lOiAncGhvbmUnLFxuICAgICAgLy8gICBkZXNjcmlwdGlvbjogJ0hvdyBjYW4gd2UgcmVhY2ggeW91PycsXG4gICAgICAvLyAgIHR5cGU6ICd0ZXh0J1xuICAgICAgLy8gfV0sXG4gICAgICBkZWZhdWx0RmllbGRzOiBbXSxcbiAgICAgIGZpZWxkczogW10sXG4gICAgICBmaWVsZFJlbW92ZVdhcm46IGZhbHNlLFxuICAgICAgaW5wdXRTZXRzOiBbXSxcbiAgICAgIHJvbGVzOiB7XG4gICAgICAgIDE6ICdBZG1pbmlzdHJhdG9yJ1xuICAgICAgfSxcbiAgICAgIG5vdGlmeToge1xuICAgICAgICBlcnJvcjogbWVzc2FnZSA9PiBjb25zb2xlLmVycm9yKG1lc3NhZ2UpLFxuICAgICAgICBzdWNjZXNzOiBtZXNzYWdlID0+IGNvbnNvbGUubG9nKG1lc3NhZ2UpLFxuICAgICAgICB3YXJuaW5nOiBtZXNzYWdlID0+IGNvbnNvbGUud2FybihtZXNzYWdlKVxuICAgICAgfSxcbiAgICAgIG9uU2F2ZTogKGV2dCwgZm9ybURhdGEpID0+IG51bGwsXG4gICAgICBvbkNsZWFyQWxsOiAoKSA9PiBudWxsLFxuICAgICAgcHJlcGVuZDogZmFsc2UsXG4gICAgICBzb3J0YWJsZUNvbnRyb2xzOiBmYWxzZSxcbiAgICAgIHN0aWNreUNvbnRyb2xzOiB7XG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcbiAgICAgICAgb2Zmc2V0OiB7XG4gICAgICAgICAgdG9wOiA1LFxuICAgICAgICAgIGJvdHRvbTogJ2F1dG8nLFxuICAgICAgICAgIHJpZ2h0OiAnYXV0bydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRlbXBsYXRlczoge30sXG4gICAgICBzaG93QWN0aW9uQnV0dG9uczogdHJ1ZSxcbiAgICAgIHR5cGVVc2VyRGlzYWJsZWRBdHRyczoge30sXG4gICAgICB0eXBlVXNlckF0dHJzOiB7fSxcbiAgICAgIHR5cGVVc2VyRXZlbnRzOiB7fSxcbiAgICAgIHByZWZpeDogJ2Zvcm0tYnVpbGRlci0nXG4gICAgfTtcblxuXG5leHBvcnQgY29uc3QgZGVmYXVsdEkxOG4gPSB7XG4gICAgICBsb2NhdGlvbjogJ2h0dHBzOi8vZm9ybWJ1aWxkZXIub25saW5lL2Fzc2V0cy9sYW5nLycsXG4gICAgICBsYW5nczogW1xuICAgICAgICAnZW4tVVMnXG4gICAgICBdLFxuICAgICAgcHJlbG9hZGVkOiB7XG4gICAgICAgICdlbi1VUyc6IHtcbiAgICAgICAgICBhZGRPcHRpb246ICdBZGQgT3B0aW9uICsnLFxuICAgICAgICAgIGFsbEZpZWxkc1JlbW92ZWQ6ICdBbGwgZmllbGRzIHdlcmUgcmVtb3ZlZC4nLFxuICAgICAgICAgIGFsbG93TXVsdGlwbGVGaWxlczogJ0FsbG93IHVzZXJzIHRvIHVwbG9hZCBtdWx0aXBsZSBmaWxlcycsXG4gICAgICAgICAgYXV0b2NvbXBsZXRlOiAnQXV0b2NvbXBsZXRlJyxcbiAgICAgICAgICBidXR0b246ICdCdXR0b24nLFxuICAgICAgICAgIGNhbm5vdEJlRW1wdHk6ICdUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgICAgY2hlY2tib3hHcm91cDogJ0NoZWNrYm94IEdyb3VwJyxcbiAgICAgICAgICBjaGVja2JveDogJ0NoZWNrYm94JyxcbiAgICAgICAgICBjaGVja2JveGVzOiAnQ2hlY2tib3hlcycsXG4gICAgICAgICAgY2xhc3NOYW1lOiAnQ2xhc3MnLFxuICAgICAgICAgIGNsZWFyQWxsTWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbGVhciBhbGwgZmllbGRzPycsXG4gICAgICAgICAgY2xlYXI6ICdDbGVhcicsXG4gICAgICAgICAgY2xvc2U6ICdDbG9zZScsXG4gICAgICAgICAgY29udGVudDogJ0NvbnRlbnQnLFxuICAgICAgICAgIGNvcHk6ICdDb3B5IFRvIENsaXBib2FyZCcsXG4gICAgICAgICAgY29weUJ1dHRvbjogJyYjNDM7JyxcbiAgICAgICAgICBjb3B5QnV0dG9uVG9vbHRpcDogJ0NvcHknLFxuICAgICAgICAgIGRhdGVGaWVsZDogJ0RhdGUgRmllbGQnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSGVscCBUZXh0JyxcbiAgICAgICAgICBkZXNjcmlwdGlvbkZpZWxkOiAnRGVzY3JpcHRpb24nLFxuICAgICAgICAgIGRldk1vZGU6ICdEZXZlbG9wZXIgTW9kZScsXG4gICAgICAgICAgZWRpdE5hbWVzOiAnRWRpdCBOYW1lcycsXG4gICAgICAgICAgZWRpdG9yVGl0bGU6ICdGb3JtIEVsZW1lbnRzJyxcbiAgICAgICAgICBlZGl0WE1MOiAnRWRpdCBYTUwnLFxuICAgICAgICAgIGVuYWJsZU90aGVyOiAnRW5hYmxlICZxdW90O090aGVyJnF1b3Q7JyxcbiAgICAgICAgICBlbmFibGVPdGhlck1zZzogJ0xldCB1c2VycyB0byBlbnRlciBhbiB1bmxpc3RlZCBvcHRpb24nLFxuICAgICAgICAgIGZpZWxkTm9uRWRpdGFibGU6ICdUaGlzIGZpZWxkIGNhbm5vdCBiZSBlZGl0ZWQuJyxcbiAgICAgICAgICBmaWVsZFJlbW92ZVdhcm5pbmc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZmllbGQ/JyxcbiAgICAgICAgICBmaWxlVXBsb2FkOiAnRmlsZSBVcGxvYWQnLFxuICAgICAgICAgIGZvcm1VcGRhdGVkOiAnRm9ybSBVcGRhdGVkJyxcbiAgICAgICAgICBnZXRTdGFydGVkOiAnRHJhZyBhIGZpZWxkIGZyb20gdGhlIHJpZ2h0IHRvIHRoaXMgYXJlYScsXG4gICAgICAgICAgaGVhZGVyOiAnSGVhZGVyJyxcbiAgICAgICAgICBoaWRlOiAnRWRpdCcsXG4gICAgICAgICAgaGlkZGVuOiAnSGlkZGVuIElucHV0JyxcbiAgICAgICAgICBpbmxpbmU6ICdJbmxpbmUnLFxuICAgICAgICAgIGlubGluZURlc2M6ICdEaXNwbGF5IHt0eXBlfSBpbmxpbmUnLFxuICAgICAgICAgIGxhYmVsOiAnTGFiZWwnLFxuICAgICAgICAgIGxhYmVsRW1wdHk6ICdGaWVsZCBMYWJlbCBjYW5ub3QgYmUgZW1wdHknLFxuICAgICAgICAgIGxpbWl0Um9sZTogJ0xpbWl0IGFjY2VzcyB0byBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHJvbGVzOicsXG4gICAgICAgICAgbWFuZGF0b3J5OiAnTWFuZGF0b3J5JyxcbiAgICAgICAgICBtYXhsZW5ndGg6ICdNYXggTGVuZ3RoJyxcbiAgICAgICAgICBtaW5PcHRpb25NZXNzYWdlOiAnVGhpcyBmaWVsZCByZXF1aXJlcyBhIG1pbmltdW0gb2YgMiBvcHRpb25zJyxcbiAgICAgICAgICBtdWx0aXBsZUZpbGVzOiAnTXVsdGlwbGUgRmlsZXMnLFxuICAgICAgICAgIG5hbWU6ICdOYW1lJyxcbiAgICAgICAgICBubzogJ05vJyxcbiAgICAgICAgICBub0ZpZWxkc1RvQ2xlYXI6ICdUaGVyZSBhcmUgbm8gZmllbGRzIHRvIGNsZWFyJyxcbiAgICAgICAgICBudW1iZXI6ICdOdW1iZXInLFxuICAgICAgICAgIG9mZjogJ09mZicsXG4gICAgICAgICAgb246ICdPbicsXG4gICAgICAgICAgb3B0aW9uOiAnT3B0aW9uJyxcbiAgICAgICAgICBvcHRpb25zOiAnT3B0aW9ucycsXG4gICAgICAgICAgb3B0aW9uYWw6ICdvcHRpb25hbCcsXG4gICAgICAgICAgb3B0aW9uTGFiZWxQbGFjZWhvbGRlcjogJ0xhYmVsJyxcbiAgICAgICAgICBvcHRpb25WYWx1ZVBsYWNlaG9sZGVyOiAnVmFsdWUnLFxuICAgICAgICAgIG9wdGlvbkVtcHR5OiAnT3B0aW9uIHZhbHVlIHJlcXVpcmVkJyxcbiAgICAgICAgICBvdGhlcjogJ090aGVyJyxcbiAgICAgICAgICBwYXJhZ3JhcGg6ICdQYXJhZ3JhcGgnLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnUGxhY2Vob2xkZXInLFxuICAgICAgICAgICdwbGFjZWhvbGRlci52YWx1ZSc6ICdWYWx1ZScsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLmxhYmVsJzogJ0xhYmVsJyxcbiAgICAgICAgICAncGxhY2Vob2xkZXIudGV4dCc6ICcnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci50ZXh0YXJlYSc6ICcnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci5lbWFpbCc6ICdFbnRlciB5b3UgZW1haWwnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci5wbGFjZWhvbGRlcic6ICcnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci5jbGFzc05hbWUnOiAnc3BhY2Ugc2VwYXJhdGVkIGNsYXNzZXMnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci5wYXNzd29yZCc6ICdFbnRlciB5b3VyIHBhc3N3b3JkJyxcbiAgICAgICAgICBwcmV2aWV3OiAnUHJldmlldycsXG4gICAgICAgICAgcmFkaW9Hcm91cDogJ1JhZGlvIEdyb3VwJyxcbiAgICAgICAgICByYWRpbzogJ1JhZGlvJyxcbiAgICAgICAgICByZW1vdmVNZXNzYWdlOiAnUmVtb3ZlIEVsZW1lbnQnLFxuICAgICAgICAgIHJlbW92ZU9wdGlvbjogJ1JlbW92ZSBPcHRpb24nLFxuICAgICAgICAgIHJlbW92ZTogJyYjMjE1OycsXG4gICAgICAgICAgcmVxdWlyZWQ6ICdSZXF1aXJlZCcsXG4gICAgICAgICAgcmljaFRleHQ6ICdSaWNoIFRleHQgRWRpdG9yJyxcbiAgICAgICAgICByb2xlczogJ0FjY2VzcycsXG4gICAgICAgICAgcm93czogJ1Jvd3MnLFxuICAgICAgICAgIHNhdmU6ICdTYXZlJyxcbiAgICAgICAgICBzZWxlY3RPcHRpb25zOiAnT3B0aW9ucycsXG4gICAgICAgICAgc2VsZWN0OiAnU2VsZWN0JyxcbiAgICAgICAgICBzZWxlY3RDb2xvcjogJ1NlbGVjdCBDb2xvcicsXG4gICAgICAgICAgc2VsZWN0aW9uc01lc3NhZ2U6ICdBbGxvdyBNdWx0aXBsZSBTZWxlY3Rpb25zJyxcbiAgICAgICAgICBzaXplOiAnU2l6ZScsXG4gICAgICAgICAgJ3NpemUueHMnOiAnRXh0cmEgU21hbGwnLFxuICAgICAgICAgICdzaXplLnNtJzogJ1NtYWxsJyxcbiAgICAgICAgICAnc2l6ZS5tJzogJ0RlZmF1bHQnLFxuICAgICAgICAgICdzaXplLmxnJzogJ0xhcmdlJyxcbiAgICAgICAgICBzdHlsZTogJ1N0eWxlJyxcbiAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgIGJ0bjoge1xuICAgICAgICAgICAgICAnZGVmYXVsdCc6ICdEZWZhdWx0JyxcbiAgICAgICAgICAgICAgZGFuZ2VyOiAnRGFuZ2VyJyxcbiAgICAgICAgICAgICAgaW5mbzogJ0luZm8nLFxuICAgICAgICAgICAgICBwcmltYXJ5OiAnUHJpbWFyeScsXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6ICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdWJ0eXBlOiAnVHlwZScsXG4gICAgICAgICAgdGV4dDogJ1RleHQgRmllbGQnLFxuICAgICAgICAgIHRleHRBcmVhOiAnVGV4dCBBcmVhJyxcbiAgICAgICAgICB0b2dnbGU6ICdUb2dnbGUnLFxuICAgICAgICAgIHdhcm5pbmc6ICdXYXJuaW5nIScsXG4gICAgICAgICAgdmFsdWU6ICdWYWx1ZScsXG4gICAgICAgICAgdmlld0pTT046ICd7ICB9JyxcbiAgICAgICAgICB2aWV3WE1MOiAnJmx0Oy8mZ3Q7JyxcbiAgICAgICAgICB5ZXM6ICdZZXMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgY29uZmlnID0ge307XG4iLCJleHBvcnQgY29uc3QgaW5zdGFuY2VEYXRhID0ge307XG5cbmV4cG9ydCBjbGFzcyBEYXRhIHtcbiAgY29uc3RydWN0b3IoZm9ybUlEKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICAgIHRoaXMuZm9ybUlEID0gZm9ybUlEO1xuICAgIHRoaXMubGF5b3V0ID0gJyc7XG4gICAgaW5zdGFuY2VEYXRhW2Zvcm1JRF0gPSB0aGlzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhdmFpbGFibGVmaWVsZHMgPSB7fTtcbiIsIlxuZXhwb3J0IGNvbnN0IGluc3RhbmNlRG9tID0ge307XG5leHBvcnQgY29uc3QgZGVmYXVsdFN1YnR5cGVzID0ge1xuICAgICAgdGV4dDogWyd0ZXh0JywgJ3Bhc3N3b3JkJywgJ2VtYWlsJywgJ2NvbG9yJywgJ3RlbCddLFxuICAgICAgaGVhZGVyOiBbJ2gxJywgJ2gyJywgJ2gzJ10sXG4gICAgICBidXR0b246IFsnYnV0dG9uJywgJ3N1Ym1pdCcsICdyZXNldCddLFxuICAgICAgcGFyYWdyYXBoOiBbJ3AnLCAnYWRkcmVzcycsICdibG9ja3F1b3RlJywgJ2NhbnZhcycsICdvdXRwdXQnXSxcbiAgICAgIHRleHRhcmVhOiBbJ3RleHRhcmVhJywgJ3F1aWxsJ11cbiAgICB9O1xuXG5cbmV4cG9ydCBjb25zdCBlbXB0eSA9IGVsZW1lbnQgPT4ge1xuICB3aGlsZSAoZWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmZpcnN0Q2hpbGQpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlciA9IChlbGVtcywgdGVybSwgc2hvdyA9IHRydWUpID0+IHtcbiAgbGV0IGZpbHRlcmVkRWxlbXMgPSBbXTtcbiAgbGV0IHRvZ2dsZSA9IFsnbm9uZScsICdibG9jayddO1xuXG4gIGlmIChzaG93KSB7XG4gICAgdG9nZ2xlID0gdG9nZ2xlLnJldmVyc2UoKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBlbGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxldCB0eHQgPSBlbGVtc1tpXS50ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eHQuaW5kZXhPZih0ZXJtLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgZWxlbXNbaV0uc3R5bGUuZGlzcGxheSA9IHRvZ2dsZVswXTtcbiAgICAgIGZpbHRlcmVkRWxlbXMucHVzaChlbGVtc1tpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSB0b2dnbGVbMV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRWxlbXM7XG59O1xuXG5leHBvcnQgY29uc3Qgb3B0aW9uRmllbGRzID0gW1xuICAgICAgJ3NlbGVjdCcsXG4gICAgICAnY2hlY2tib3gtZ3JvdXAnLFxuICAgICAgJ2NoZWNrYm94JyxcbiAgICAgICdyYWRpby1ncm91cCcsXG4gICAgICAnYXV0b2NvbXBsZXRlJ1xuICAgIF07XG5cbmV4cG9ydCBjb25zdCBvcHRpb25GaWVsZHNSZWdFeCA9IG5ldyBSZWdFeHAoYCgke29wdGlvbkZpZWxkcy5qb2luKCd8Jyl9KWApO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tIHtcbiAgY29uc3RydWN0b3IoZm9ybUlEKSB7XG4gICAgdGhpcy5vcHRpb25GaWVsZHMgPSBvcHRpb25GaWVsZHM7XG4gICAgdGhpcy5vcHRpb25GaWVsZHNSZWdFeCA9IG9wdGlvbkZpZWxkc1JlZ0V4O1xuXG4gICAgdGhpcy5zdWJ0eXBlcyA9IGRlZmF1bHRTdWJ0eXBlcztcblxuICAgIC8qKlxuICAgICAqIFV0aWwgdG8gcmVtb3ZlIGNvbnRlbnRzIG9mIERPTSBPYmplY3RcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IGVsZW1lbnQgd2l0aCBpdHMgY2hpbGRyZW4gcmVtb3ZlZFxuICAgICAqL1xuICAgIHRoaXMuZW1wdHkgPSBlbXB0eTtcblxuICAgIC8qKlxuICAgICAqIEhpZGUgb3Igc2hvdyBhbiBBcnJheSBvciBIVE1MQ29sbGVjdGlvbiBvZiBlbGVtZW50c1xuICAgICAqIEBwYXJhbSAge0FycmF5fSAgIGVsZW1zXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSAgdGVybSAgbWF0Y2ggdGV4dENvbnRlbnQgdG8gdGhpcyB0ZXJtXG4gICAgICogQHBhcmFtICB7Qm9vbGVhbn0gc2hvdyAgb3IgaGlkZSBlbGVtZW50c1xuICAgICAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIGZpbHRlcmVkIGVsZW1lbnRzXG4gICAgICovXG4gICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XG5cbiAgICBpbnN0YW5jZURvbVtmb3JtSURdID0gdGhpcztcbiAgICByZXR1cm4gaW5zdGFuY2VEb21bZm9ybUlEXTtcbiAgfVxufVxuIiwiLyoqXG4gKiBGb3JtIEJ1aWxkZXIgZXZlbnRzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHZhcmlvdXMgZXZlbnRzIHRvIGJlIHRyaWdnZXJcbiAqL1xuLy8gZnVuY3Rpb24gZmJFdmVudHMoKXtcbiAgY29uc3QgZXZlbnRzID0ge307XG5cbiAgZXZlbnRzLmxvYWRlZCA9IG5ldyBFdmVudCgnbG9hZGVkJyk7XG4gIGV2ZW50cy52aWV3RGF0YSA9IG5ldyBFdmVudCgndmlld0RhdGEnKTtcbiAgZXZlbnRzLnVzZXJEZWNsaW5lZCA9IG5ldyBFdmVudCgndXNlckRlY2xpbmVkJyk7XG4gIGV2ZW50cy5tb2RhbENsb3NlZCA9IG5ldyBFdmVudCgnbW9kYWxDbG9zZWQnKTtcbiAgZXZlbnRzLm1vZGFsT3BlbmVkID0gbmV3IEV2ZW50KCdtb2RhbE9wZW5lZCcpO1xuICBldmVudHMuZm9ybVNhdmVkID0gbmV3IEV2ZW50KCdmb3JtU2F2ZWQnKTtcbiAgZXZlbnRzLmZpZWxkQWRkZWQgPSBuZXcgRXZlbnQoJ2ZpZWxkQWRkZWQnKTtcbiAgZXZlbnRzLmZpZWxkUmVtb3ZlZCA9IG5ldyBFdmVudCgnZmllbGRSZW1vdmVkJyk7XG4gIGV2ZW50cy5maWVsZFJlbmRlcmVkID0gbmV3IEV2ZW50KCdmaWVsZFJlbmRlcmVkJyk7XG5cbi8vICAgcmV0dXJuIGV2ZW50cztcbi8vIH1cblxuZXhwb3J0IGRlZmF1bHQgZXZlbnRzO1xuIiwiaW1wb3J0IERvbSBmcm9tICcuL2RvbSc7XG5pbXBvcnQge1xuICBEYXRhLFxuICBhdmFpbGFibGVmaWVsZHMgYXMgYUZpZWxkc1xufSBmcm9tICcuL2RhdGEnO1xuaW1wb3J0IG1pMThuIGZyb20gJ21pMThuJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBldmVudHMgZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IEhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7ZGVmYXVsdE9wdGlvbnMsIGRlZmF1bHRJMThuLCBjb25maWd9IGZyb20gJy4vY29uZmlnJztcblxucmVxdWlyZSgnLi9wb2x5ZmlsbHMuanMnKS5kZWZhdWx0O1xuXG5sZXQgaW5zdGFuY2VUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbmNvbnN0IEZvcm1CdWlsZGVyID0gZnVuY3Rpb24ob3B0cywgZWxlbWVudCkge1xuICBjb25zdCBmb3JtQnVpbGRlciA9IHRoaXM7XG4gIGNvbnN0IGkxOG4gPSBtaTE4bi5jdXJyZW50O1xuICBjb25zdCBmb3JtSUQgPSAnZnJtYi0nICsgaW5zdGFuY2VUaW1lKys7XG4gIGNvbnN0IGRhdGEgPSBuZXcgRGF0YShmb3JtSUQpO1xuICBjb25zdCBkID0gbmV3IERvbShmb3JtSUQpO1xuICBjb25zdCBoZWxwZXJzID0gbmV3IEhlbHBlcnMoZm9ybUlEKTtcbiAgY29uc3QgbSA9IHV0aWxzLm1hcmt1cDtcblxuICBjb25zdCBvcmlnaW5hbE9wdHMgPSBvcHRzO1xuXG4gIG9wdHMgPSBoZWxwZXJzLnByb2Nlc3NPcHRpb25zKG9wdHMpO1xuXG4gIGNvbnN0IHN1YnR5cGVzID0gY29uZmlnLnN1YnR5cGVzID0gaGVscGVycy5wcm9jZXNzU3VidHlwZXMob3B0cy5zdWJ0eXBlcyk7XG4gIGhlbHBlcnMuZWRpdG9yVUkoZm9ybUlEKTtcblxuICBsZXQgJHN0YWdlID0gJChkLnN0YWdlKTtcblxuICBkYXRhLmxheW91dCA9IGhlbHBlcnMuZWRpdG9yTGF5b3V0KG9wdHMuY29udHJvbFBvc2l0aW9uKTtcbiAgZGF0YS5mb3JtSUQgPSBmb3JtSUQ7XG4gIGRhdGEubGFzdElEID0gYCR7ZGF0YS5mb3JtSUR9LWZsZC0xYDtcblxuICBsZXQgZnJtYkZpZWxkcyA9IGhlbHBlcnMub3JkZXJGaWVsZHMob3B0cy5maWVsZHMpO1xuXG4gIGlmIChvcHRzLmRpc2FibGVGaWVsZHMpIHtcbiAgICAvLyByZW1vdmUgZGlzYWJsZWRGaWVsZHNcbiAgICBmcm1iRmllbGRzID0gZnJtYkZpZWxkcy5maWx0ZXIoZnVuY3Rpb24oZmllbGQpIHtcbiAgICAgIHJldHVybiAhdXRpbHMuaW5BcnJheShmaWVsZC5hdHRycy50eXBlLCBvcHRzLmRpc2FibGVGaWVsZHMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9wdHMuc29ydGFibGVDb250cm9scykge1xuICAgIGQuY29udHJvbHMuY2xhc3NMaXN0LmFkZCgnc29ydC1lbmFibGVkJyk7XG4gIH1cblxuICBsZXQgJGNiVUwgPSAkKGQuY29udHJvbHMpO1xuXG4gIC8vIExvb3AgdGhyb3VnaCBmbXJiRmllbGRzXG4gIHV0aWxzLmZvckVhY2goZnJtYkZpZWxkcywgKGkpID0+IHtcbiAgICBsZXQge2F0dHJzLCBpY29uLCAuLi5maWVsZH0gPSBmcm1iRmllbGRzW2ldO1xuICAgIGxldCBjb250cm9sTGFiZWwgPSBmaWVsZC5sYWJlbDtcbiAgICBsZXQgaWNvbkNsYXNzTmFtZSA9ICFpY29uID8gYGljb24tJHthdHRycy5uYW1lIHx8IGF0dHJzLnR5cGV9YCA6ICcnO1xuICAgIGlmIChpY29uKSB7XG4gICAgICBjb250cm9sTGFiZWwgPSBgPHNwYW4gY2xhc3M9XCJjb250cm9sLWljb25cIj4ke2ljb259PC9zcGFuPiR7ZmllbGQubGFiZWx9YDtcbiAgICB9XG4gICAgbGV0IG5ld0ZpZWxkQ29udHJvbCA9IG0oJ2xpJyxcbiAgICAgIG0oJ3NwYW4nLCBjb250cm9sTGFiZWwpLFxuICAgICAge2NsYXNzTmFtZTogYCR7aWNvbkNsYXNzTmFtZX0gaW5wdXQtY29udHJvbCBpbnB1dC1jb250cm9sLSR7aX1gfVxuICAgICk7XG5cbiAgICBhRmllbGRzW2F0dHJzLnR5cGVdID0gZnJtYkZpZWxkc1tpXTtcbiAgICBuZXdGaWVsZENvbnRyb2wuZGF0YXNldC50eXBlID0gYXR0cnMudHlwZTtcbiAgICBkLmNvbnRyb2xzLmFwcGVuZENoaWxkKG5ld0ZpZWxkQ29udHJvbCk7XG4gIH0pO1xuXG4gIGlmIChvcHRzLmlucHV0U2V0cy5sZW5ndGgpIHtcbiAgICAkKCc8bGkvPicsIHsnY2xhc3MnOiAnZmItc2VwYXJhdG9yJ30pLmh0bWwoJzxocj4nKS5hcHBlbmRUbygkY2JVTCk7XG4gICAgb3B0cy5pbnB1dFNldHMuZm9yRWFjaCgoc2V0LCBpKSA9PiB7XG4gICAgICBzZXQubmFtZSA9IHNldC5uYW1lIHx8IHV0aWxzLm1ha2VDbGFzc05hbWUoc2V0LmxhYmVsKTtcbiAgICAgIGxldCBpbnB1dFNldCA9IG0oJ2xpJywgc2V0LmxhYmVsLCB7XG4gICAgICAgIGNsYXNzTmFtZTogYGlucHV0LXNldC1jb250cm9sIGlucHV0LXNldC0ke2l9YCxcbiAgICAgICAgdHlwZTogc2V0Lm5hbWVcbiAgICAgIH0pO1xuICAgICAgJChpbnB1dFNldCkuYXBwZW5kVG8oJGNiVUwpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU29ydGFibGUgZmllbGRzXG4gICRzdGFnZS5zb3J0YWJsZSh7XG4gICAgY3Vyc29yOiAnbW92ZScsXG4gICAgb3BhY2l0eTogMC45LFxuICAgIHJldmVydDogMTUwLFxuICAgIGJlZm9yZVN0b3A6IChldnQsIHVpKSA9PiBoZWxwZXJzLmJlZm9yZVN0b3AuY2FsbChoZWxwZXJzLCBldnQsIHVpKSxcbiAgICBzdGFydDogKGV2dCwgdWkpID0+IGhlbHBlcnMuc3RhcnRNb3ZpbmcuY2FsbChoZWxwZXJzLCBldnQsIHVpKSxcbiAgICBzdG9wOiAoZXZ0LCB1aSkgPT4gaGVscGVycy5zdG9wTW92aW5nLmNhbGwoaGVscGVycywgZXZ0LCB1aSksXG4gICAgY2FuY2VsOiAnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIC5kaXNhYmxlZC1maWVsZCwgLmZvcm0tZWxlbWVudHMsIC5idG4sIGJ1dHRvbicsXG4gICAgcGxhY2Vob2xkZXI6ICdmcm1iLXBsYWNlaG9sZGVyJyxcbiAgfSk7XG5cbiAgLy8gQ29udHJvbEJveCB3aXRoIGRpZmZlcmVudCBmaWVsZHNcbiAgJGNiVUwuc29ydGFibGUoe1xuICAgIGhlbHBlcjogJ2Nsb25lJyxcbiAgICBvcGFjaXR5OiAwLjksXG4gICAgY29ubmVjdFdpdGg6ICRzdGFnZSxcbiAgICBjYW5jZWw6ICcuZmItc2VwYXJhdG9yJyxcbiAgICBjdXJzb3I6ICdtb3ZlJyxcbiAgICBzY3JvbGw6IGZhbHNlLFxuICAgIHBsYWNlaG9sZGVyOiAndWktc3RhdGUtaGlnaGxpZ2h0JyxcbiAgICBzdGFydDogKGV2dCwgdWkpID0+IGhlbHBlcnMuc3RhcnRNb3ZpbmcuY2FsbChoZWxwZXJzLCBldnQsIHVpKSxcbiAgICBzdG9wOiAoZXZ0LCB1aSkgPT4gaGVscGVycy5zdG9wTW92aW5nLmNhbGwoaGVscGVycywgZXZ0LCB1aSksXG4gICAgcmV2ZXJ0OiAxNTAsXG4gICAgYmVmb3JlU3RvcDogKGV2dCwgdWkpID0+IGhlbHBlcnMuYmVmb3JlU3RvcC5jYWxsKGhlbHBlcnMsIGV2dCwgdWkpLFxuICAgIGRpc3RhbmNlOiAzLFxuICAgIHVwZGF0ZTogZnVuY3Rpb24oZXZlbnQsIHVpKSB7XG4gICAgICBpZiAoaGVscGVycy5kb0NhbmNlbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh1aS5pdGVtLnBhcmVudCgpWzBdID09PSBkLnN0YWdlKSB7XG4gICAgICAgIGhlbHBlcnMuZG9DYW5jZWwgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzQ29udHJvbCh1aS5pdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlbHBlcnMuc2V0RmllbGRPcmRlcigkY2JVTCk7XG4gICAgICAgIGhlbHBlcnMuZG9DYW5jZWwgPSAhb3B0cy5zb3J0YWJsZUNvbnRyb2xzO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgbGV0IHByb2Nlc3NDb250cm9sID0gY29udHJvbCA9PiB7XG4gICAgaWYgKGNvbnRyb2xbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKCdpbnB1dC1zZXQtY29udHJvbCcpKSB7XG4gICAgICBsZXQgaW5wdXRTZXRzID0gW107XG4gICAgICBsZXQgaW5wdXRTZXQgPSBvcHRzLmlucHV0U2V0cy5maWx0ZXIoc2V0ID0+XG4gICAgICAgIHNldC5uYW1lID09PSBjb250cm9sWzBdLnR5cGUpWzBdO1xuICAgICAgaWYgKGlucHV0U2V0LnNob3dIZWFkZXIpIHtcbiAgICAgICAgbGV0IGhlYWRlciA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdoZWFkZXInLFxuICAgICAgICAgICAgc3VidHlwZTogJ2gyJyxcbiAgICAgICAgICAgIGlkOiBpbnB1dFNldC5uYW1lLFxuICAgICAgICAgICAgbGFiZWw6IGlucHV0U2V0LmxhYmVsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpbnB1dFNldHMucHVzaChoZWFkZXIpO1xuICAgICAgfVxuICAgICAgaW5wdXRTZXRzLnB1c2goLi4uaW5wdXRTZXQuZmllbGRzKTtcbiAgICAgIGlucHV0U2V0cy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgcHJlcEZpZWxkVmFycyhmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGlmIChoZWxwZXJzLnN0b3BJbmRleCB8fCBoZWxwZXJzLnN0b3BJbmRleCA9PT0gMCkge1xuICAgICAgICAgIGhlbHBlcnMuc3RvcEluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVwRmllbGRWYXJzKGNvbnRyb2wsIHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBkLmVkaXRvcldyYXAgPSBtKCdkaXYnLCBudWxsLCB7XG4gICAgaWQ6IGAke2RhdGEuZm9ybUlEfS1mb3JtLXdyYXBgLFxuICAgIGNsYXNzTmFtZTogJ2Zvcm0td3JhcCBmb3JtLWJ1aWxkZXInICsgdXRpbHMubW9iaWxlQ2xhc3MoKVxuICB9KTtcblxuICBsZXQgJGVkaXRvcldyYXAgPSAkKGQuZWRpdG9yV3JhcCk7XG5cbiAgbGV0IGNiV3JhcCA9IG0oJ2RpdicsIGQuY29udHJvbHMsIHtcbiAgICBpZDogYCR7ZGF0YS5mb3JtSUR9LWNiLXdyYXBgLFxuICAgIGNsYXNzTmFtZTogJ2NiLXdyYXAgJyArIGRhdGEubGF5b3V0LmNvbnRyb2xzXG4gIH0pO1xuXG4gIGlmIChvcHRzLnNob3dBY3Rpb25CdXR0b25zKSB7XG4gICAgY29uc3QgYnV0dG9ucyA9IG9wdHMuYWN0aW9uQnV0dG9ucy5tYXAoYnRuRGF0YSA9PiB7XG4gICAgICBpZiAoYnRuRGF0YS5pZCAmJiBvcHRzLmRpc2FibGVkQWN0aW9uQnV0dG9ucy5pbmRleE9mKGJ0bkRhdGEuaWQpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gaGVscGVycy5wcm9jZXNzQWN0aW9uQnV0dG9ucyhidG5EYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBmb3JtQWN0aW9ucyA9IGQuZm9ybUFjdGlvbnMgPSBtKCdkaXYnLCBidXR0b25zLCB7XG4gICAgICBjbGFzc05hbWU6ICdmb3JtLWFjdGlvbnMgYnRuLWdyb3VwJ1xuICAgIH0pO1xuXG4gICAgY2JXcmFwLmFwcGVuZENoaWxkKGZvcm1BY3Rpb25zKTtcbiAgfVxuXG4gIGxldCBzdGFnZVdyYXAgPSBtKCdkaXYnLCBbZC5zdGFnZSwgY2JXcmFwXSwge1xuICAgIGlkOiBgJHtkYXRhLmZvcm1JRH0tc3RhZ2Utd3JhcGAsXG4gICAgY2xhc3NOYW1lOiAnc3RhZ2Utd3JhcCAnICsgZGF0YS5sYXlvdXQuc3RhZ2VcbiAgfSk7XG5cbiAgJGVkaXRvcldyYXAuYXBwZW5kKHN0YWdlV3JhcCwgY2JXcmFwKTtcblxuICBpZiAoZWxlbWVudC50eXBlICE9PSAndGV4dGFyZWEnKSB7XG4gICAgJChlbGVtZW50KS5hcHBlbmQoJGVkaXRvcldyYXApO1xuICB9IGVsc2Uge1xuICAgICQoZWxlbWVudCkucmVwbGFjZVdpdGgoJGVkaXRvcldyYXApO1xuICB9XG5cbiAgbGV0IHNhdmVBbmRVcGRhdGUgPSB1dGlscy5kZWJvdW5jZShldnQgPT4ge1xuICAgIGlmIChldnQpIHtcbiAgICAgIGlmIChldnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldnQudGFyZ2V0Lm5hbWUgPT09ICdjbGFzc05hbWUnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0ICRmaWVsZCA9ICQoZXZ0LnRhcmdldCkuY2xvc2VzdCgnLmZvcm0tZmllbGQnKTtcbiAgICAgIGhlbHBlcnMudXBkYXRlUHJldmlldygkZmllbGQpO1xuICAgICAgaGVscGVycy5zYXZlLmNhbGwoaGVscGVycyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBTYXZlIGZpZWxkIG9uIGNoYW5nZVxuICAkc3RhZ2Uub24oJ2NoYW5nZSBibHVyIGtleXVwJywgJy5mb3JtLWVsZW1lbnRzIGlucHV0LCAuZm9ybS1lbGVtZW50cyBzZWxlY3QsIC5mb3JtLWVsZW1lbnRzIHRleHRhcmVhJywgc2F2ZUFuZFVwZGF0ZSk7XG5cbiAgJCgnbGknLCBkLmNvbnRyb2xzKS5jbGljayhldnQgPT4ge1xuICAgIGxldCAkY29udHJvbCA9ICQoZXZ0LnRhcmdldCkuY2xvc2VzdCgnbGknKTtcbiAgICBoZWxwZXJzLnN0b3BJbmRleCA9IHVuZGVmaW5lZDtcbiAgICBwcm9jZXNzQ29udHJvbCgkY29udHJvbCk7XG4gICAgaGVscGVycy5zYXZlLmNhbGwoaGVscGVycyk7XG4gIH0pO1xuXG4gIC8vIEFkZCBhcHBlbmQgYW5kIHByZXBlbmQgb3B0aW9ucyBpZiBuZWNlc3NhcnlcbiAgbGV0IG5vbkVkaXRhYmxlRmllbGRzID0gKCkgPT4ge1xuICAgIGxldCBjYW5jZWxBcnJheSA9IFtdO1xuICAgIGNvbnN0IGRpc2FibGVkRmllbGQgPSB0eXBlID0+XG4gICAgdXRpbHMubWFya3VwKCdsaScsIG9wdHNbdHlwZV0sIHtcbiAgICAgIGNsYXNzTmFtZTogYGRpc2FibGVkLWZpZWxkIGZvcm0tJHt0eXBlfWBcbiAgICB9KTtcblxuICAgIGlmIChvcHRzLnByZXBlbmQgJiYgISQoJy5kaXNhYmxlZC1maWVsZC5mb3JtLXByZXBlbmQnLCBkLnN0YWdlKS5sZW5ndGgpIHtcbiAgICAgIGNhbmNlbEFycmF5LnB1c2godHJ1ZSk7XG4gICAgICAkc3RhZ2UucHJlcGVuZChkaXNhYmxlZEZpZWxkKCdwcmVwZW5kJykpO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmFwcGVuZCAmJiAhJCgnLmRpc2FibGVkLWZpZWxkLmZvcm0tLmFwcGVuZCcsIGQuc3RhZ2UpLmxlbmd0aCkge1xuICAgICAgY2FuY2VsQXJyYXkucHVzaCh0cnVlKTtcbiAgICAgICRzdGFnZS5hcHBlbmQoZGlzYWJsZWRGaWVsZCgnYXBwZW5kJykpO1xuICAgIH1cblxuICAgIGhlbHBlcnMuZGlzYWJsZWRUVChkLnN0YWdlKTtcbiAgICByZXR1cm4gY2FuY2VsQXJyYXkuc29tZShlbGVtID0+IGVsZW0gPT09IHRydWUpO1xuICB9O1xuXG4gIGxldCBwcmVwRmllbGRWYXJzID0gZnVuY3Rpb24oJGZpZWxkLCBpc05ldyA9IGZhbHNlKSB7XG4gICAgbGV0IGZpZWxkID0ge307XG4gICAgaWYgKCRmaWVsZCBpbnN0YW5jZW9mIGpRdWVyeSkge1xuICAgICAgbGV0IHthdHRycywgbGFiZWx9ID0gYUZpZWxkc1skZmllbGRbMF0uZGF0YXNldC50eXBlXTtcbiAgICAgIGlmIChhRmllbGRzWyRmaWVsZFswXS5kYXRhc2V0LnR5cGVdKSB7XG4gICAgICAgIGZpZWxkID0gT2JqZWN0LmFzc2lnbih7fSwgYXR0cnMpO1xuICAgICAgICBmaWVsZC5sYWJlbCA9IGxhYmVsO1xuICAgICAgfSBlbHNlIHsgLy8gaXMgZGF0YVR5cGUgWE1MXG4gICAgICAgIGxldCBhdHRycyA9ICRmaWVsZFswXS5hdHRyaWJ1dGVzO1xuICAgICAgICBpZiAoIWlzTmV3KSB7XG4gICAgICAgICAgZmllbGQudmFsdWVzID0gJGZpZWxkLmNoaWxkcmVuKCkubWFwKChpbmRleCwgZWxlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICQoZWxlbSkudGV4dCgpLFxuICAgICAgICAgICAgICB2YWx1ZTogJChlbGVtKS5hdHRyKCd2YWx1ZScpLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogQm9vbGVhbigkKGVsZW0pLmF0dHIoJ3NlbGVjdGVkJykpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgZmllbGRbYXR0cnNbaV0ubmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZCA9IE9iamVjdC5hc3NpZ24oe30sICRmaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKCFmaWVsZC5uYW1lKSB7XG4gICAgICBmaWVsZC5uYW1lID0gdXRpbHMubmFtZUF0dHIoZmllbGQpO1xuICAgIH1cblxuICAgIGlmIChpc05ldyAmJiB1dGlscy5pbkFycmF5KGZpZWxkLnR5cGUsXG4gICAgICBbJ3RleHQnLFxuICAgICAgICdudW1iZXInLFxuICAgICAgICdmaWxlJyxcbiAgICAgICAnZGF0ZScsXG4gICAgICAgJ3NlbGVjdCcsXG4gICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICAnYXV0b2NvbXBsZXRlJ10pKSB7XG4gICAgICBmaWVsZC5jbGFzc05hbWUgPSBmaWVsZC5jbGFzc05hbWUgfHwgJ2Zvcm0tY29udHJvbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkLmNsYXNzTmFtZSA9IGZpZWxkLmNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBsZXQgbWF0Y2ggPSAvKD86XnxcXHMpYnRuLSguKj8pKD86XFxzfCQpL2cuZXhlYyhmaWVsZC5jbGFzc05hbWUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgZmllbGQuc3R5bGUgPSBtYXRjaFsxXTtcbiAgICB9XG5cbiAgICB1dGlscy5lc2NhcGVBdHRycyhmaWVsZCk7XG5cbiAgICBhcHBlbmROZXdGaWVsZChmaWVsZCwgaXNOZXcpO1xuXG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5maWVsZEFkZGVkKTtcbiAgICB9XG5cbiAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LnJlbW92ZSgnZW1wdHknKTtcbiAgfTtcblxuICAvLyBQYXJzZSBzYXZlZCBYTUwgdGVtcGxhdGUgZGF0YVxuICBsZXQgbG9hZEZpZWxkcyA9IGZ1bmN0aW9uKGZvcm1EYXRhKSB7XG4gICAgZm9ybURhdGEgPSBoZWxwZXJzLmdldERhdGEoZm9ybURhdGEpO1xuICAgIGlmIChmb3JtRGF0YSAmJiBmb3JtRGF0YS5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGZpZWxkRGF0YSA9IHV0aWxzLnRyaW1PYmooZm9ybURhdGFbaV0pO1xuICAgICAgICBwcmVwRmllbGRWYXJzKGZpZWxkRGF0YSk7XG4gICAgICB9XG4gICAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LnJlbW92ZSgnZW1wdHknKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMuZGVmYXVsdEZpZWxkcyAmJiBvcHRzLmRlZmF1bHRGaWVsZHMubGVuZ3RoKSB7XG4gICAgICAvLyBMb2FkIGRlZmF1bHQgZmllbGRzIGlmIG5vbmUgYXJlIHNldFxuICAgICAgb3B0cy5kZWZhdWx0RmllbGRzLmZvckVhY2goZmllbGQgPT4gcHJlcEZpZWxkVmFycyhmaWVsZCkpO1xuICAgICAgc3RhZ2VXcmFwLmNsYXNzTGlzdC5yZW1vdmUoJ2VtcHR5Jyk7XG4gICAgfSBlbHNlIGlmICghb3B0cy5wcmVwZW5kICYmICFvcHRzLmFwcGVuZCkge1xuICAgICAgc3RhZ2VXcmFwLmNsYXNzTGlzdC5hZGQoJ2VtcHR5Jyk7XG4gICAgICBzdGFnZVdyYXAuZGF0YXNldC5jb250ZW50ID0gaTE4bi5nZXRTdGFydGVkO1xuICAgIH1cbiAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcblxuICAgIGlmIChub25FZGl0YWJsZUZpZWxkcygpKSB7XG4gICAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LnJlbW92ZSgnZW1wdHknKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBkYXRhIGZvciBmaWVsZCB3aXRoIG9wdGlvbnMgW3NlbGVjdCwgY2hlY2tib3gtZ3JvdXAsIHJhZGlvLWdyb3VwXVxuICAgKlxuICAgKiBAdG9kbyAgIHJlZmFjdG9yIHRoaXMgbmFzdHkgfmNyYXB+IGNvZGUsIGl0cyBhY3R1YWxseSBwYWluZnVsIHRvIGxvb2sgYXRcbiAgICogQHBhcmFtICB7T2JqZWN0fSB2YWx1ZXNcbiAgICogQHJldHVybiB7U3RyaW5nfSBmaWVsZCBvcHRpb25zIG1hcmt1cFxuICAgKi9cbiAgbGV0IGZpZWxkT3B0aW9ucyA9IGZ1bmN0aW9uKGZpZWxkRGF0YSkge1xuICAgIGxldCBvcHRpb25BY3Rpb25zID0gW1xuICAgICAgICB1dGlscy5tYXJrdXAoJ2EnLCBpMThuLmFkZE9wdGlvbiwge2NsYXNzTmFtZTogJ2FkZCBhZGQtb3B0J30pXG4gICAgICBdO1xuICAgIGxldCBmaWVsZE9wdGlvbnMgPSBbXG4gICAgICBgPGxhYmVsIGNsYXNzPVwiZmFsc2UtbGFiZWxcIj4ke2kxOG4uc2VsZWN0T3B0aW9uc308L2xhYmVsPmBcbiAgICBdO1xuICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBmaWVsZERhdGEubXVsdGlwbGUgfHwgKGZpZWxkRGF0YS50eXBlID09PSAnY2hlY2tib3gtZ3JvdXAnKTtcbiAgICBjb25zdCBvcHRpb25EYXRhVGVtcGxhdGUgPSBsYWJlbCA9PiB7XG4gICAgICBsZXQgb3B0aW9uRGF0YSA9IHtcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICB2YWx1ZTogdXRpbHMuaHlwaGVuQ2FzZShsYWJlbClcbiAgICAgIH07XG5cbiAgICAgIGlmIChmaWVsZERhdGEudHlwZSAhPT0gJ2F1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgb3B0aW9uRGF0YS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3B0aW9uRGF0YTtcbiAgICB9O1xuXG4gICAgaWYgKCFmaWVsZERhdGEudmFsdWVzIHx8ICFmaWVsZERhdGEudmFsdWVzLmxlbmd0aCkge1xuICAgICAgbGV0IGRlZmF1bHRPcHRDb3VudCA9IHV0aWxzLmluQXJyYXkoZmllbGREYXRhLnR5cGUsIFsnY2hlY2tib3gtZ3JvdXAnLCAnY2hlY2tib3gnXSkgPyBbMV0gOiBbMSwgMiwgM107XG4gICAgICBmaWVsZERhdGEudmFsdWVzID0gZGVmYXVsdE9wdENvdW50Lm1hcChmdW5jdGlvbihpbmRleCkge1xuICAgICAgICBsZXQgbGFiZWwgPSBgJHtpMThuLm9wdGlvbn0gJHtpbmRleH1gO1xuICAgICAgICByZXR1cm4gb3B0aW9uRGF0YVRlbXBsYXRlKGxhYmVsKTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IGZpcnN0T3B0aW9uID0gZmllbGREYXRhLnZhbHVlc1swXTtcbiAgICAgIGlmIChmaXJzdE9wdGlvbi5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0ZWQnKSkge1xuICAgICAgICBmaXJzdE9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuc3VyZSBvcHRpb24gZGF0YSBpcyBoYXMgYWxsIHJlcXVpcmVkIGtleXNcbiAgICAgIGZpZWxkRGF0YS52YWx1ZXMuZm9yRWFjaChvcHRpb24gPT4gT2JqZWN0LmFzc2lnbih7fSwge3NlbGVjdGVkOiBmYWxzZX0sIG9wdGlvbikpO1xuICAgIH1cblxuICAgIGZpZWxkT3B0aW9ucy5wdXNoKCc8ZGl2IGNsYXNzPVwic29ydGFibGUtb3B0aW9ucy13cmFwXCI+Jyk7XG5cbiAgICBmaWVsZE9wdGlvbnMucHVzaCgnPG9sIGNsYXNzPVwic29ydGFibGUtb3B0aW9uc1wiPicpO1xuICAgIHV0aWxzLmZvckVhY2goZmllbGREYXRhLnZhbHVlcywgaSA9PiB7XG4gICAgICBmaWVsZE9wdGlvbnMucHVzaChzZWxlY3RGaWVsZE9wdGlvbnMoZmllbGREYXRhLm5hbWUsIGZpZWxkRGF0YS52YWx1ZXNbaV0sIGlzTXVsdGlwbGUpKTtcbiAgICB9KTtcbiAgICBmaWVsZE9wdGlvbnMucHVzaCgnPC9vbD4nKTtcbiAgICBmaWVsZE9wdGlvbnMucHVzaCh1dGlscy5tYXJrdXAoJ2RpdicsIG9wdGlvbkFjdGlvbnMsIHtjbGFzc05hbWU6ICdvcHRpb24tYWN0aW9ucyd9KS5vdXRlckhUTUwpO1xuICAgIGZpZWxkT3B0aW9ucy5wdXNoKCc8L2Rpdj4nKTtcblxuICAgIHJldHVybiB1dGlscy5tYXJrdXAoJ2RpdicsIGZpZWxkT3B0aW9ucy5qb2luKCcnKSwge2NsYXNzTmFtZTogJ2Zvcm0tZ3JvdXAgZmllbGQtb3B0aW9ucyd9KS5vdXRlckhUTUw7XG4gIH07XG5cbiAgY29uc3QgZGVmYXVsdEZpZWxkQXR0cnMgPSB0eXBlID0+IHtcbiAgICBjb25zdCBkZWZhdWx0QXR0cnMgPSBbXG4gICAgICAncmVxdWlyZWQnLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAnbmFtZScsXG4gICAgICAnYWNjZXNzJyxcbiAgICAgICd2YWx1ZSdcbiAgICBdO1xuICAgIGxldCBub1ZhbEZpZWxkcyA9IFsnaGVhZGVyJywgJ3BhcmFncmFwaCcsICdmaWxlJywgJ2F1dG9jb21wbGV0ZSddLmNvbmNhdChkLm9wdGlvbkZpZWxkcyk7XG4gICAgbGV0IHZhbHVlRmllbGQgPSAhdXRpbHMuaW5BcnJheSh0eXBlLCBub1ZhbEZpZWxkcyk7XG5cbiAgICBjb25zdCB0eXBlQXR0cnNNYXAgPSB7XG4gICAgICBhdXRvY29tcGxldGU6IGRlZmF1bHRBdHRycy5jb25jYXQoW1xuICAgICAgICAnb3B0aW9ucycsXG4gICAgICBdKSxcbiAgICAgIGJ1dHRvbjogW1xuICAgICAgICAnbGFiZWwnLFxuICAgICAgICAnc3VidHlwZScsXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgICdjbGFzc05hbWUnLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICdhY2Nlc3MnLFxuICAgICAgXSxcbiAgICAgIGNoZWNrYm94OiBbXG4gICAgICAgICdyZXF1aXJlZCcsXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICd0b2dnbGUnLFxuICAgICAgICAnaW5saW5lJyxcbiAgICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ2FjY2VzcycsXG4gICAgICAgICdvdGhlcicsXG4gICAgICAgICdvcHRpb25zJyxcbiAgICAgIF0sXG4gICAgICB0ZXh0OiBkZWZhdWx0QXR0cnMuY29uY2F0KFtcbiAgICAgICAgJ3N1YnR5cGUnLFxuICAgICAgICAnbWF4bGVuZ3RoJyxcbiAgICAgIF0pLFxuICAgICAgZGF0ZTogZGVmYXVsdEF0dHJzLFxuICAgICAgZmlsZTogZGVmYXVsdEF0dHJzLmNvbmNhdChbXG4gICAgICAgICdtdWx0aXBsZSdcbiAgICAgIF0pLFxuICAgICAgaGVhZGVyOiBbXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdzdWJ0eXBlJyxcbiAgICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAgICdhY2Nlc3MnLFxuICAgICAgXSxcbiAgICAgIGhpZGRlbjogW1xuICAgICAgICAnbmFtZScsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICdhY2Nlc3MnLFxuICAgICAgXSxcbiAgICAgIHBhcmFncmFwaDogW1xuICAgICAgICAnbGFiZWwnLFxuICAgICAgICAnc3VidHlwZScsXG4gICAgICAgICdjbGFzc05hbWUnLFxuICAgICAgICAnYWNjZXNzJyxcbiAgICAgIF0sXG4gICAgICBudW1iZXI6IGRlZmF1bHRBdHRycy5jb25jYXQoW1xuICAgICAgICAnbWluJyxcbiAgICAgICAgJ21heCcsXG4gICAgICAgICdzdGVwJyxcbiAgICAgIF0pLFxuICAgICAgc2VsZWN0OiBkZWZhdWx0QXR0cnMuY29uY2F0KFtcbiAgICAgICAgJ211bHRpcGxlJyxcbiAgICAgICAgJ29wdGlvbnMnLFxuICAgICAgXSksXG4gICAgICB0ZXh0YXJlYTogZGVmYXVsdEF0dHJzLmNvbmNhdChbXG4gICAgICAgICdzdWJ0eXBlJyxcbiAgICAgICAgJ21heGxlbmd0aCcsXG4gICAgICAgICdyb3dzJyxcbiAgICAgIF0pLFxuXG4gICAgfTtcblxuICAgIHR5cGVBdHRyc01hcFsnY2hlY2tib3gtZ3JvdXAnXSA9IHR5cGVBdHRyc01hcC5jaGVja2JveDtcbiAgICB0eXBlQXR0cnNNYXBbJ3JhZGlvLWdyb3VwJ10gPSB0eXBlQXR0cnNNYXAuY2hlY2tib3g7XG5cbiAgICBsZXQgdHlwZUF0dHJzID0gdHlwZUF0dHJzTWFwW3R5cGVdO1xuXG4gICAgaWYgKHR5cGUgPT09ICdyYWRpby1ncm91cCcpIHtcbiAgICAgIHV0aWxzLnJlbW92ZSgndG9nZ2xlJywgdHlwZUF0dHJzKTtcbiAgICB9XG5cbiAgICAvLyBIZWxwIFRleHQgLyBEZXNjcmlwdGlvbiBGaWVsZFxuICAgIGlmICh1dGlscy5pbkFycmF5KHR5cGUsIFsnaGVhZGVyJywgJ3BhcmFncmFwaCcsICdidXR0b24nXSkpIHtcbiAgICAgIHV0aWxzLnJlbW92ZSgnZGVzY3JpcHRpb24nLCB0eXBlQXR0cnMpO1xuICAgIH1cblxuICAgIGlmICghdmFsdWVGaWVsZCkge1xuICAgICAgdXRpbHMucmVtb3ZlKCd2YWx1ZScsIHR5cGVBdHRycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVBdHRycyB8fCBkZWZhdWx0QXR0cnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBlZGl0YWJsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmllbGRcbiAgICogQHBhcmFtICB7b2JqZWN0fSB2YWx1ZXMgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGFkdmFuY2VkIGZpZWxkc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICBtYXJrdXAgZm9yIGFkdmFuY2VkIGZpZWxkc1xuICAgKi9cbiAgbGV0IGFkdkZpZWxkcyA9IHZhbHVlcyA9PiB7XG4gICAgbGV0IGFkdkZpZWxkcyA9IFtdO1xuICAgIGxldCBmaWVsZEF0dHJzID0gZGVmYXVsdEZpZWxkQXR0cnModmFsdWVzLnR5cGUpO1xuICAgIGNvbnN0IGFkdkZpZWxkTWFwID0ge1xuICAgICAgcmVxdWlyZWQ6ICgpID0+IHJlcXVpcmVkRmllbGQodmFsdWVzKSxcbiAgICAgIHRvZ2dsZTogKCkgPT4gYm9vbEF0dHJpYnV0ZSgndG9nZ2xlJywgdmFsdWVzLCB7Zmlyc3Q6IGkxOG4udG9nZ2xlfSksXG4gICAgICBpbmxpbmU6ICgpID0+IHtcbiAgICAgICAgbGV0IGxhYmVscyA9IHtcbiAgICAgICAgICBmaXJzdDogaTE4bi5pbmxpbmUsXG4gICAgICAgICAgc2Vjb25kOiBtaTE4bi5nZXQoJ2lubGluZURlc2MnLCB2YWx1ZXMudHlwZS5yZXBsYWNlKCctZ3JvdXAnLCAnJykpXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGJvb2xBdHRyaWJ1dGUoJ2lubGluZScsIHZhbHVlcywgbGFiZWxzKTtcbiAgICAgIH0sXG4gICAgICBsYWJlbDogKCkgPT4gdGV4dEF0dHJpYnV0ZSgnbGFiZWwnLCB2YWx1ZXMpLFxuICAgICAgZGVzY3JpcHRpb246ICgpID0+IHRleHRBdHRyaWJ1dGUoJ2Rlc2NyaXB0aW9uJywgdmFsdWVzKSxcbiAgICAgIHN1YnR5cGU6ICgpID0+IHNlbGVjdEF0dHJpYnV0ZSgnc3VidHlwZScsIHZhbHVlcywgc3VidHlwZXNbdmFsdWVzLnR5cGVdKSxcbiAgICAgIHN0eWxlOiAoKSA9PiBidG5TdHlsZXModmFsdWVzLnN0eWxlKSxcbiAgICAgIHBsYWNlaG9sZGVyOiAoKSA9PiB0ZXh0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIHZhbHVlcyksXG4gICAgICByb3dzOiAoKSA9PiBudW1iZXJBdHRyaWJ1dGUoJ3Jvd3MnLCB2YWx1ZXMpLFxuICAgICAgY2xhc3NOYW1lOiAoKSA9PiB0ZXh0QXR0cmlidXRlKCdjbGFzc05hbWUnLCB2YWx1ZXMpLFxuICAgICAgbmFtZTogKCkgPT4gdGV4dEF0dHJpYnV0ZSgnbmFtZScsIHZhbHVlcyksXG4gICAgICB2YWx1ZTogKCkgPT4gdGV4dEF0dHJpYnV0ZSgndmFsdWUnLCB2YWx1ZXMpLFxuICAgICAgbWF4bGVuZ3RoOiAoKSA9PiBudW1iZXJBdHRyaWJ1dGUoJ21heGxlbmd0aCcsIHZhbHVlcyksXG4gICAgICBhY2Nlc3M6ICgpID0+IHtcbiAgICAgICAgbGV0IHJvbGVzRGlzcGxheSA9IHZhbHVlcy5yb2xlICE9PSB1bmRlZmluZWQgPyAnc3R5bGU9XCJkaXNwbGF5OmJsb2NrXCInIDogJyc7XG4gICAgICAgIGxldCBhdmFpbGFibGVSb2xlcyA9IFtcbiAgICAgICAgICBgPGRpdiBjbGFzcz1cImF2YWlsYWJsZS1yb2xlc1wiICR7cm9sZXNEaXNwbGF5fT5gXG4gICAgICAgIF07XG4gICAgICAgIGZvciAoa2V5IGluIG9wdHMucm9sZXMpIHtcbiAgICAgICAgICBpZiAob3B0cy5yb2xlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBsZXQgY2hlY2tlZCA9IHV0aWxzLmluQXJyYXkoa2V5LCByb2xlcykgPyAnY2hlY2tlZCcgOiAnJztcbiAgICAgICAgICAgIGxldCByb2xlSWQgPSBgZmxkLSR7ZGF0YS5sYXN0SUR9LXJvbGVzLSR7a2V5fWA7XG4gICAgICAgICAgICBhdmFpbGFibGVSb2xlcy5wdXNoKGA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInJvbGVzW11cIiB2YWx1ZT1cIiR7a2V5fVwiIGlkPVwiJHtyb2xlSWR9XCIgJHtjaGVja2VkfSBjbGFzcz1cInJvbGVzLWZpZWxkXCIgLz4gPGxhYmVsIGZvcj1cIiR7cm9sZUlkfVwiPiR7b3B0cy5yb2xlc1trZXldfTwvbGFiZWw+PGJyLz5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXZhaWxhYmxlUm9sZXMucHVzaCgnPC9kaXY+Jyk7XG4gICAgICAgIGxldCBhY2Nlc3NMYWJlbHMgPSB7Zmlyc3Q6IGkxOG4ucm9sZXMsIHNlY29uZDogaTE4bi5saW1pdFJvbGUsIGNvbnRlbnQ6IGF2YWlsYWJsZVJvbGVzLmpvaW4oJycpfTtcblxuICAgICAgICByZXR1cm4gYm9vbEF0dHJpYnV0ZSgnYWNjZXNzJywgdmFsdWVzLCBhY2Nlc3NMYWJlbHMpO1xuICAgICAgfSxcbiAgICAgIG90aGVyOiAoKSA9PiBib29sQXR0cmlidXRlKCdvdGhlcicsIHZhbHVlcywge2ZpcnN0OiBpMThuLmVuYWJsZU90aGVyLCBzZWNvbmQ6IGkxOG4uZW5hYmxlT3RoZXJNc2d9KSxcbiAgICAgIG9wdGlvbnM6ICgpID0+IGZpZWxkT3B0aW9ucyh2YWx1ZXMpXG4gICAgfTtcbiAgICBsZXQga2V5O1xuICAgIGxldCByb2xlcyA9IHZhbHVlcy5yb2xlICE9PSB1bmRlZmluZWQgPyB2YWx1ZXMucm9sZS5zcGxpdCgnLCcpIDogW107XG4gICAgbGV0IG51bUF0dHJzID0gWydtaW4nLCAnbWF4JywgJ3N0ZXAnXTtcblxuICAgIGlmICh2YWx1ZXMudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIG51bUF0dHJzLmZvckVhY2gobnVtQXR0ciA9PiB7XG4gICAgICAgIGFkdkZpZWxkTWFwW251bUF0dHJdID0gKCkgPT4gbnVtYmVyQXR0cmlidXRlKG51bUF0dHIsIHZhbHVlcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgYWR2RmllbGRNYXBbJ211bHRpcGxlJ10gPSAoKSA9PiB7XG4gICAgICAgIGxldCBsYWJlbHMgPSB7XG4gICAgICAgICAgZmlyc3Q6IGkxOG4ubXVsdGlwbGVGaWxlcyxcbiAgICAgICAgICBzZWNvbmQ6IGkxOG4uYWxsb3dNdWx0aXBsZUZpbGVzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBib29sQXR0cmlidXRlKCdtdWx0aXBsZScsIHZhbHVlcywgbGFiZWxzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlcy50eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgYWR2RmllbGRNYXBbJ211bHRpcGxlJ10gPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBib29sQXR0cmlidXRlKCdtdWx0aXBsZScsIHZhbHVlcywge2ZpcnN0OiAnICcsIHNlY29uZDogaTE4bi5zZWxlY3Rpb25zTWVzc2FnZX0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhmaWVsZEF0dHJzKS5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgIGxldCBhdHRyID0gZmllbGRBdHRyc1tpbmRleF07XG4gICAgICBsZXQgdXNlRGVmYXVsdEF0dHIgPSBbdHJ1ZV07XG5cbiAgICAgIGlmIChvcHRzLnR5cGVVc2VyRGlzYWJsZWRBdHRyc1t2YWx1ZXMudHlwZV0pIHtcbiAgICAgICAgbGV0IHR5cGVEaXNhYmxlZEF0dHJzID0gb3B0cy50eXBlVXNlckRpc2FibGVkQXR0cnNbdmFsdWVzLnR5cGVdO1xuICAgICAgICB1c2VEZWZhdWx0QXR0ci5wdXNoKCF1dGlscy5pbkFycmF5KGF0dHIsIHR5cGVEaXNhYmxlZEF0dHJzKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdKSB7XG4gICAgICAgIGxldCB1c2VyQXR0cnMgPSBPYmplY3Qua2V5cyhvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdKTtcbiAgICAgICAgdXNlRGVmYXVsdEF0dHIucHVzaCghdXRpbHMuaW5BcnJheShhdHRyLCB1c2VyQXR0cnMpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmluQXJyYXkoYXR0ciwgb3B0cy5kaXNhYmxlZEF0dHJzKSkge1xuICAgICAgICB1c2VEZWZhdWx0QXR0ci5wdXNoKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVzZURlZmF1bHRBdHRyLmV2ZXJ5KHVzZSA9PiB1c2UgPT09IHRydWUpKSB7XG4gICAgICAgIGFkdkZpZWxkcy5wdXNoKGFkdkZpZWxkTWFwW2F0dHJdKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQXBwZW5kIGN1c3RvbSBhdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdHlwZVVzZXJBdHRycyBvcHRpb25cbiAgICBpZiAob3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXSkge1xuICAgICAgYWR2RmllbGRzLnB1c2gocHJvY2Vzc1R5cGVVc2VyQXR0cnMob3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXSwgdmFsdWVzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkdkZpZWxkcy5qb2luKCcnKTtcbiAgfTtcblxuICAvKipcbiAgICogUHJvY2Vzc2VzIHR5cGVVc2VyQXR0cnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSB0eXBlVXNlckF0dHIgb3B0aW9uXG4gICAqIEBwYXJhbSAge09iamVjdH0gdmFsdWVzICAgICAgIGZpZWxkIGF0dHJpYnV0ZXNcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgICAgICAgbWFya3VwIGZvciBjdXN0b20gdXNlciBhdHRyaWJ1dGVzXG4gICAqL1xuICBmdW5jdGlvbiBwcm9jZXNzVHlwZVVzZXJBdHRycyh0eXBlVXNlckF0dHIsIHZhbHVlcykge1xuICAgIGxldCBhZHZGaWVsZCA9IFtdO1xuXG4gICAgZm9yIChsZXQgYXR0cmlidXRlIGluIHR5cGVVc2VyQXR0cikge1xuICAgICAgaWYgKHR5cGVVc2VyQXR0ci5oYXNPd25Qcm9wZXJ0eShhdHRyaWJ1dGUpKSB7XG4gICAgICAgIGxldCBvcmlnID0gaTE4blthdHRyaWJ1dGVdO1xuICAgICAgICBsZXQgb3JpZ1ZhbHVlID0gdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0udmFsdWU7XG4gICAgICAgIHR5cGVVc2VyQXR0clthdHRyaWJ1dGVdLnZhbHVlID0gdmFsdWVzW2F0dHJpYnV0ZV0gfHwgdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0udmFsdWUgfHwgJyc7XG5cbiAgICAgICAgaWYgKHR5cGVVc2VyQXR0clthdHRyaWJ1dGVdLmxhYmVsKSB7XG4gICAgICAgICAgaTE4blthdHRyaWJ1dGVdID0gdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0ubGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0ub3B0aW9ucykge1xuICAgICAgICAgIGFkdkZpZWxkLnB1c2goc2VsZWN0VXNlckF0dHJzKGF0dHJpYnV0ZSwgdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZHZGaWVsZC5wdXNoKGlucHV0VXNlckF0dHJzKGF0dHJpYnV0ZSwgdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkxOG5bYXR0cmlidXRlXSA9IG9yaWc7XG4gICAgICAgIHR5cGVVc2VyQXR0clthdHRyaWJ1dGVdLnZhbHVlID0gb3JpZ1ZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZHZGaWVsZC5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXh0IGlucHV0IHZhbHVlIGZvciBhdHRyaWJ1dGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXR0cnMgYWxzbyBrbm93biBhcyB2YWx1ZXNcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgICBpbnB1dCBtYXJrdXBcbiAgICovXG4gIGZ1bmN0aW9uIGlucHV0VXNlckF0dHJzKG5hbWUsIGF0dHJzKSB7XG4gICAgbGV0IHRleHRBdHRycyA9IHtcbiAgICAgICAgaWQ6IG5hbWUgKyAnLScgKyBkYXRhLmxhc3RJRCxcbiAgICAgICAgdGl0bGU6IGF0dHJzLmRlc2NyaXB0aW9uIHx8IGF0dHJzLmxhYmVsIHx8IG5hbWUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdHlwZTogYXR0cnMudHlwZSB8fCAndGV4dCcsXG4gICAgICAgIGNsYXNzTmFtZTogW2BmbGQtJHtuYW1lfWBdXG4gICAgICB9O1xuICAgIGxldCBsYWJlbCA9IGA8bGFiZWwgZm9yPVwiJHt0ZXh0QXR0cnMuaWR9XCI+JHtpMThuW25hbWVdfTwvbGFiZWw+YDtcblxuICAgIGlmICghdXRpbHMuaW5BcnJheSh0ZXh0QXR0cnMudHlwZSwgWydjaGVja2JveCcsICdjaGVja2JveC1ncm91cCcsICdyYWRpby1ncm91cCddKSkge1xuICAgICAgdGV4dEF0dHJzLmNsYXNzTmFtZS5wdXNoKCdmb3JtLWNvbnRyb2wnKTtcbiAgICB9XG5cbiAgICB0ZXh0QXR0cnMgPSBPYmplY3QuYXNzaWduKHt9LCBhdHRycywgdGV4dEF0dHJzKTtcbiAgICBsZXQgdGV4dElucHV0ID0gYDxpbnB1dCAke3V0aWxzLmF0dHJTdHJpbmcodGV4dEF0dHJzKX0+YDtcbiAgICBsZXQgaW5wdXRXcmFwID0gYDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+JHt0ZXh0SW5wdXR9PC9kaXY+YDtcbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICR7bmFtZX0td3JhcFwiPiR7bGFiZWx9JHtpbnB1dFdyYXB9PC9kaXY+YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgaW5wdXQgZm9yIG11bHRpcGxlIGNob2ljZSB1c2VyIGF0dHJpYnV0ZXNcbiAgICogQHRvZG8gIHJlcGxhY2Ugd2l0aCBzZWxlY3RBdHRyXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgIHNlbGVjdCBtYXJrdXBcbiAgICovXG4gIGZ1bmN0aW9uIHNlbGVjdFVzZXJBdHRycyhuYW1lLCBvcHRpb25zKSB7XG4gICAgbGV0IG9wdGlzID0gT2JqZWN0LmtleXMob3B0aW9ucy5vcHRpb25zKS5tYXAodmFsID0+IHtcbiAgICAgIGxldCBhdHRycyA9IHt2YWx1ZTogdmFsfTtcbiAgICAgIGlmICh2YWwgPT09IG9wdGlvbnMudmFsdWUpIHtcbiAgICAgICAgYXR0cnMuc2VsZWN0ZWQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8b3B0aW9uICR7dXRpbHMuYXR0clN0cmluZyhhdHRycyl9PiR7b3B0aW9ucy5vcHRpb25zW3ZhbF19PC9vcHRpb24+YDtcbiAgICB9KTtcbiAgICBsZXQgc2VsZWN0QXR0cnMgPSB7XG4gICAgICBpZDogbmFtZSArICctJyArIGRhdGEubGFzdElELFxuICAgICAgdGl0bGU6IG9wdGlvbnMuZGVzY3JpcHRpb24gfHwgb3B0aW9ucy5sYWJlbCB8fCBuYW1lLnRvVXBwZXJDYXNlKCksXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgY2xhc3NOYW1lOiBgZmxkLSR7bmFtZX0gZm9ybS1jb250cm9sYFxuICAgIH07XG4gICAgbGV0IGxhYmVsID0gYDxsYWJlbCBmb3I9XCIke3NlbGVjdEF0dHJzLmlkfVwiPiR7aTE4bltuYW1lXX08L2xhYmVsPmA7XG5cbiAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5maWx0ZXIocHJvcCA9PiB7XG4gICAgICByZXR1cm4gIXV0aWxzLmluQXJyYXkocHJvcCwgWyd2YWx1ZScsICdvcHRpb25zJywgJ2xhYmVsJ10pO1xuICAgIH0pLmZvckVhY2goZnVuY3Rpb24oYXR0cikge1xuICAgICAgc2VsZWN0QXR0cnNbYXR0cl0gPSBvcHRpb25zW2F0dHJdO1xuICAgIH0pO1xuXG4gICAgbGV0IHNlbGVjdCA9IGA8c2VsZWN0ICR7dXRpbHMuYXR0clN0cmluZyhzZWxlY3RBdHRycyl9PiR7b3B0aXMuam9pbignJyl9PC9zZWxlY3Q+YDtcbiAgICBsZXQgaW5wdXRXcmFwID0gYDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+JHtzZWxlY3R9PC9kaXY+YDtcbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICR7bmFtZX0td3JhcFwiPiR7bGFiZWx9JHtpbnB1dFdyYXB9PC9kaXY+YDtcbiAgfVxuXG4gIGxldCBib29sQXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSwgdmFsdWVzLCBsYWJlbHMpIHtcbiAgICBpZiAob3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXSAmJiBvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxhYmVsID0gKHR4dCkgPT4ge1xuICAgICAgcmV0dXJuIGA8bGFiZWwgZm9yPVwiJHtuYW1lfS0ke2RhdGEubGFzdElEfVwiPiR7dHh0fTwvbGFiZWw+YDtcbiAgICB9O1xuICAgIGxldCBjaGVja2VkID0gKHZhbHVlc1tuYW1lXSA/ICdjaGVja2VkJyA6ICcnKTtcbiAgICBsZXQgaW5wdXQgPSBgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZmxkLSR7bmFtZX1cIiBuYW1lPVwiJHtuYW1lfVwiIHZhbHVlPVwidHJ1ZVwiICR7Y2hlY2tlZH0gaWQ9XCIke25hbWV9LSR7ZGF0YS5sYXN0SUR9XCIvPiBgO1xuICAgIGxldCBsZWZ0ID0gW107XG4gICAgbGV0IHJpZ2h0ID0gW1xuICAgICAgaW5wdXRcbiAgICBdO1xuXG4gICAgaWYgKGxhYmVscy5maXJzdCkge1xuICAgICAgbGVmdC51bnNoaWZ0KGxhYmVsKGxhYmVscy5maXJzdCkpO1xuICAgIH1cblxuICAgIGlmIChsYWJlbHMuc2Vjb25kKSB7XG4gICAgICByaWdodC5wdXNoKGxhYmVsKGxhYmVscy5zZWNvbmQpKTtcbiAgICB9XG5cbiAgICBpZiAobGFiZWxzLmNvbnRlbnQpIHtcbiAgICAgIHJpZ2h0LnB1c2gobGFiZWxzLmNvbnRlbnQpO1xuICAgIH1cblxuICAgIHJpZ2h0LnVuc2hpZnQoJzxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+Jyk7XG4gICAgcmlnaHQucHVzaCgnPC9kaXY+Jyk7XG5cbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICR7bmFtZX0td3JhcFwiPiR7bGVmdC5jb25jYXQocmlnaHQpLmpvaW4oJycpfTwvZGl2PmA7XG4gIH07XG5cbiAgbGV0IGJ0blN0eWxlcyA9IGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICBsZXQgc3R5bGVzID0gaTE4bi5zdHlsZXMuYnRuO1xuICAgICAgbGV0IHN0eWxlRmllbGQgPSAnJztcblxuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIGxldCBzdHlsZUxhYmVsID0gYDxsYWJlbD4ke2kxOG4uc3R5bGV9PC9sYWJlbD5gO1xuICAgICAgc3R5bGVGaWVsZCArPSBgPGlucHV0IHZhbHVlPVwiJHtzdHlsZX1cIiBuYW1lPVwic3R5bGVcIiB0eXBlPVwiaGlkZGVuXCIgY2xhc3M9XCJidG4tc3R5bGVcIj5gO1xuICAgICAgc3R5bGVGaWVsZCArPSAnPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiPic7XG5cbiAgICAgIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgbGV0IGNsYXNzTGlzdCA9IFsnYnRuLXhzJywgJ2J0bicsIGBidG4tJHtlbGVtZW50fWBdO1xuICAgICAgICBpZiAoc3R5bGUgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICBjbGFzc0xpc3QucHVzaCgnc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlRmllbGQgKz0gYDxidXR0b24gdmFsdWU9XCIke2VsZW1lbnR9XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiJHtjbGFzc0xpc3Quam9pbignICcpfVwiPiR7aTE4bi5zdHlsZXMuYnRuW2VsZW1lbnRdfTwvYnV0dG9uPmA7XG4gICAgICB9KTtcblxuICAgICAgc3R5bGVGaWVsZCArPSAnPC9kaXY+JztcblxuICAgICAgc3R5bGVGaWVsZCA9IGA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBzdHlsZS13cmFwXCI+JHtzdHlsZUxhYmVsfSAke3N0eWxlRmllbGR9PC9kaXY+YDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGVGaWVsZDtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgbnVtYmVyIGF0dHJpYnV0ZSB0byBhIGZpZWxkLlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9IG1hcmt1cCBmb3IgbnVtYmVyIGF0dHJpYnV0ZVxuICAgKi9cbiAgbGV0IG51bWJlckF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dHJpYnV0ZSwgdmFsdWVzKSB7XG4gICAgaWYgKG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV0gJiYgb3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXVthdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGF0dHJWYWwgPSB2YWx1ZXNbYXR0cmlidXRlXTtcbiAgICBsZXQgYXR0ckxhYmVsID0gaTE4blthdHRyaWJ1dGVdIHx8IGF0dHJpYnV0ZTtcbiAgICBsZXQgcGxhY2Vob2xkZXIgPSBpMThuW2BwbGFjZWhvbGRlci4ke2F0dHJpYnV0ZX1gXTtcbiAgICBsZXQgaW5wdXRDb25maWcgPSB7XG4gICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgIHZhbHVlOiBhdHRyVmFsLFxuICAgICAgbmFtZTogYXR0cmlidXRlLFxuICAgICAgbWluOiAnMCcsXG4gICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICBjbGFzc05hbWU6IGBmbGQtJHthdHRyaWJ1dGV9IGZvcm0tY29udHJvbGAsXG4gICAgICBpZDogYCR7YXR0cmlidXRlfS0ke2RhdGEubGFzdElEfWBcbiAgICB9O1xuICAgIGxldCBudW1iZXJBdHRyaWJ1dGUgPSBgPGlucHV0ICR7dXRpbHMuYXR0clN0cmluZyh1dGlscy50cmltT2JqKGlucHV0Q29uZmlnKSl9PmA7XG4gICAgbGV0IGlucHV0V3JhcCA9IGA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcFwiPiR7bnVtYmVyQXR0cmlidXRlfTwvZGl2PmA7XG5cbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICR7YXR0cmlidXRlfS13cmFwXCI+PGxhYmVsIGZvcj1cIiR7aW5wdXRDb25maWcuaWR9XCI+JHthdHRyTGFiZWx9PC9sYWJlbD4gJHtpbnB1dFdyYXB9PC9kaXY+YDtcbiAgfTtcblxuICAvKipcbiAgICogc2VsZWN0QXR0cmlidXRlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXR0cmlidXRlICBhdHRyaWJ1dGUgbmFtZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHZhbHVlcyAgICAgYWthIGF0dHJzXG4gICAqIEBwYXJhbSAge0FycmF5fSBvcHRpb25EYXRhICBzZWxlY3QgZmllbGQgb3B0aW9uIGRhdGFcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgICAgIHNlbGVjdCBpbnB1dCBtYWtydXBcbiAgICovXG4gIGxldCBzZWxlY3RBdHRyaWJ1dGUgPSBmdW5jdGlvbihhdHRyaWJ1dGUsIHZhbHVlcywgb3B0aW9uRGF0YSkge1xuICAgIGlmIChvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdICYmIG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV1bYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc2VsZWN0T3B0aW9ucyA9IG9wdGlvbkRhdGEubWFwKChvcHRpb24sIGkpID0+IHtcbiAgICAgIGxldCBvcHRpb25BdHRycyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBsYWJlbDogYCR7aTE4bi5vcHRpb259ICR7aX1gLFxuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgICB9LCBvcHRpb24pO1xuICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWVzW2F0dHJpYnV0ZV0pIHtcbiAgICAgICAgb3B0aW9uQXR0cnMuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8b3B0aW9uICR7dXRpbHMuYXR0clN0cmluZyh1dGlscy50cmltT2JqKG9wdGlvbkF0dHJzKSl9PiR7b3B0aW9uQXR0cnMubGFiZWx9PC9vcHRpb24+YDtcbiAgICB9KTtcbiAgICBsZXQgc2VsZWN0QXR0cnMgPSB7XG4gICAgICAgIGlkOiBhdHRyaWJ1dGUgKyAnLScgKyBkYXRhLmxhc3RJRCxcbiAgICAgICAgbmFtZTogYXR0cmlidXRlLFxuICAgICAgICBjbGFzc05hbWU6IGBmbGQtJHthdHRyaWJ1dGV9IGZvcm0tY29udHJvbGBcbiAgICAgIH07XG4gICAgbGV0IGxhYmVsID0gYDxsYWJlbCBmb3I9XCIke3NlbGVjdEF0dHJzLmlkfVwiPiR7aTE4blthdHRyaWJ1dGVdIHx8IHV0aWxzLmNhcGl0YWxpemUoYXR0cmlidXRlKX08L2xhYmVsPmA7XG4gICAgbGV0IHNlbGVjdCA9IGA8c2VsZWN0ICR7dXRpbHMuYXR0clN0cmluZyhzZWxlY3RBdHRycyl9PiR7c2VsZWN0T3B0aW9ucy5qb2luKCcnKX08L3NlbGVjdD5gO1xuICAgIGxldCBpbnB1dFdyYXAgPSBgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj4ke3NlbGVjdH08L2Rpdj5gO1xuXG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCAke3NlbGVjdEF0dHJzLm5hbWV9LXdyYXBcIj4ke2xhYmVsfSR7aW5wdXRXcmFwfTwvZGl2PmA7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNvbWUgdGV4dCBpbnB1dHMgZm9yIGZpZWxkIGF0dHJpYnV0ZXMsICoqd2lsbCBiZSByZXBsYWNlZCoqXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXR0cmlidXRlXG4gICAqIEBwYXJhbSAge09iamVjdH0gdmFsdWVzXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICovXG4gIGxldCB0ZXh0QXR0cmlidXRlID0gZnVuY3Rpb24oYXR0cmlidXRlLCB2YWx1ZXMpIHtcbiAgICBpZiAob3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXSAmJiBvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdW2F0dHJpYnV0ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcGxhY2Vob2xkZXJGaWVsZHMgPSBbXG4gICAgICAndGV4dCcsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3NlbGVjdCcsXG4gICAgICAnYXV0b2NvbXBsZXRlJ1xuICAgIF07XG5cbiAgICBsZXQgbm9OYW1lID0gW1xuICAgICAgJ2hlYWRlcicsXG4gICAgICAncGFyYWdyYXBoJ1xuICAgIF07XG5cbiAgICBsZXQgdGV4dEFyZWEgPSBbJ3BhcmFncmFwaCddO1xuXG4gICAgbGV0IGF0dHJWYWwgPSB2YWx1ZXNbYXR0cmlidXRlXSB8fCAnJztcbiAgICBsZXQgYXR0ckxhYmVsID0gaTE4blthdHRyaWJ1dGVdO1xuXG4gICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ2xhYmVsJykge1xuICAgICAgaWYgKHV0aWxzLmluQXJyYXkodmFsdWVzLnR5cGUsIHRleHRBcmVhKSkge1xuICAgICAgICBhdHRyTGFiZWwgPSBpMThuLmNvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRyVmFsID0gdXRpbHMucGFyc2VkSHRtbCh2YWx1ZXNbYXR0cmlidXRlXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1YnR5cGVzLmhlYWRlcikge1xuICAgICAgbm9OYW1lID0gbm9OYW1lLmNvbmNhdChzdWJ0eXBlcy5oZWFkZXIpO1xuICAgIH1cblxuICAgIGxldCBwbGFjZWhvbGRlciA9IGkxOG5bYHBsYWNlaG9sZGVyLiR7YXR0cmlidXRlfWBdIHx8ICcnO1xuICAgIGxldCBhdHRyaWJ1dGVmaWVsZCA9ICcnO1xuICAgIGxldCBub01ha2VBdHRyID0gW107XG5cbiAgICAvLyBGaWVsZCBoYXMgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiAhdXRpbHMuaW5BcnJheSh2YWx1ZXMudHlwZSwgcGxhY2Vob2xkZXJGaWVsZHMpKSB7XG4gICAgICBub01ha2VBdHRyLnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gRmllbGQgaGFzIG5hbWUgYXR0cmlidXRlXG4gICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ25hbWUnICYmIHV0aWxzLmluQXJyYXkodmFsdWVzLnR5cGUsIG5vTmFtZSkpIHtcbiAgICAgIG5vTWFrZUF0dHIucHVzaCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoIW5vTWFrZUF0dHIuc29tZShlbGVtID0+IGVsZW0gPT09IHRydWUpKSB7XG4gICAgICBsZXQgaW5wdXRDb25maWcgPSB7XG4gICAgICAgIG5hbWU6IGF0dHJpYnV0ZSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgICBjbGFzc05hbWU6IGBmbGQtJHthdHRyaWJ1dGV9IGZvcm0tY29udHJvbGAsXG4gICAgICAgIGlkOiBgJHthdHRyaWJ1dGV9LSR7ZGF0YS5sYXN0SUR9YFxuICAgICAgfTtcbiAgICAgIGxldCBhdHRyaWJ1dGVMYWJlbCA9IGA8bGFiZWwgZm9yPVwiJHtpbnB1dENvbmZpZy5pZH1cIj4ke2F0dHJMYWJlbH08L2xhYmVsPmA7XG5cbiAgICAgIGlmIChhdHRyaWJ1dGUgPT09ICdsYWJlbCcpIHtcbiAgICAgICAgYXR0cmlidXRlZmllbGQgKz0gYDxkaXYgY29udGVudGVkaXRhYmxlICR7dXRpbHMuYXR0clN0cmluZyhpbnB1dENvbmZpZyl9PiR7YXR0clZhbH08L2Rpdj5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRDb25maWcudmFsdWUgPSBhdHRyVmFsO1xuICAgICAgICBpbnB1dENvbmZpZy50eXBlID0gJ3RleHQnO1xuICAgICAgICBhdHRyaWJ1dGVmaWVsZCArPSBgPGlucHV0ICR7dXRpbHMuYXR0clN0cmluZyhpbnB1dENvbmZpZyl9PmA7XG4gICAgICB9XG5cbiAgICAgIGxldCBpbnB1dFdyYXAgPSBgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj4ke2F0dHJpYnV0ZWZpZWxkfTwvZGl2PmA7XG5cbiAgICAgIGxldCB2aXNpYmlsaXR5ID0gJ2Jsb2NrJztcbiAgICAgIGlmIChhdHRyaWJ1dGUgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgdmlzaWJpbGl0eSA9IHZhbHVlcy5zdWJ0eXBlICYmIHZhbHVlcy5zdWJ0eXBlID09PSAncXVpbGwnICYmICdub25lJztcbiAgICAgIH1cblxuICAgICAgYXR0cmlidXRlZmllbGQgPSBgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgJHthdHRyaWJ1dGV9LXdyYXBcIiBzdHlsZT1cImRpc3BsYXk6ICR7dmlzaWJpbGl0eX1cIj4ke2F0dHJpYnV0ZUxhYmVsfSAke2lucHV0V3JhcH08L2Rpdj5gO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVmaWVsZDtcbiAgfTtcblxuICBsZXQgcmVxdWlyZWRGaWVsZCA9IGZ1bmN0aW9uKHZhbHVlcykge1xuICAgIGxldCBub1JlcXVpcmUgPSBbXG4gICAgICAgICdoZWFkZXInLFxuICAgICAgICAncGFyYWdyYXBoJyxcbiAgICAgICAgJ2J1dHRvbidcbiAgICAgIF07XG4gICAgbGV0IG5vTWFrZSA9IFtdO1xuICAgIGxldCByZXF1aXJlRmllbGQgPSAnJztcblxuICAgIGlmICh1dGlscy5pbkFycmF5KHZhbHVlcy50eXBlLCBub1JlcXVpcmUpKSB7XG4gICAgICBub01ha2UucHVzaCh0cnVlKTtcbiAgICB9XG4gICAgaWYgKCFub01ha2Uuc29tZShlbGVtID0+IGVsZW0gPT09IHRydWUpKSB7XG4gICAgICByZXF1aXJlRmllbGQgPSBib29sQXR0cmlidXRlKCdyZXF1aXJlZCcsIHZhbHVlcywge2ZpcnN0OiBpMThuLnJlcXVpcmVkfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVpcmVGaWVsZDtcbiAgfTtcblxuICAvLyBBcHBlbmQgdGhlIG5ldyBmaWVsZCB0byB0aGUgZWRpdG9yXG4gIGxldCBhcHBlbmROZXdGaWVsZCA9IGZ1bmN0aW9uKHZhbHVlcywgaXNOZXcgPSB0cnVlKSB7XG4gICAgbGV0IHR5cGUgPSB2YWx1ZXMudHlwZSB8fCAndGV4dCc7XG4gICAgbGV0IGxhYmVsID0gdmFsdWVzLmxhYmVsIHx8IGkxOG5bdHlwZV0gfHwgaTE4bi5sYWJlbDtcbiAgICBsZXQgZGVsQnRuID0gbSgnYScsIGkxOG4ucmVtb3ZlLCB7XG4gICAgICAgIGlkOiAnZGVsXycgKyBkYXRhLmxhc3RJRCxcbiAgICAgICAgY2xhc3NOYW1lOiAnZGVsLWJ1dHRvbiBidG4gZGVsZXRlLWNvbmZpcm0nLFxuICAgICAgICB0aXRsZTogaTE4bi5yZW1vdmVNZXNzYWdlXG4gICAgICB9KTtcbiAgICBsZXQgdG9nZ2xlQnRuID0gbSgnYScsIG51bGwsIHtcbiAgICAgIGlkOiBkYXRhLmxhc3RJRCArICctZWRpdCcsXG4gICAgICBjbGFzc05hbWU6ICd0b2dnbGUtZm9ybSBidG4gaWNvbi1wZW5jaWwnLFxuICAgICAgdGl0bGU6IGkxOG4uaGlkZVxuICAgIH0pO1xuICAgIGxldCBjb3B5QnRuID0gbSgnYScsIG51bGwsIHtcbiAgICAgIGlkOiBkYXRhLmxhc3RJRCArICctY29weScsXG4gICAgICBjbGFzc05hbWU6ICdjb3B5LWJ1dHRvbiBidG4gaWNvbi1jb3B5JyxcbiAgICAgIHRpdGxlOiBpMThuLmNvcHlCdXR0b25Ub29sdGlwXG4gICAgfSk7XG5cbiAgICBsZXQgbGlDb250ZW50cyA9IG0oXG4gICAgICAnZGl2JywgW3RvZ2dsZUJ0biwgY29weUJ0biwgZGVsQnRuXSwge2NsYXNzTmFtZTogJ2ZpZWxkLWFjdGlvbnMnfVxuICAgICkub3V0ZXJIVE1MO1xuXG4gICAgbGlDb250ZW50cyArPSBgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj4ke3V0aWxzLnBhcnNlZEh0bWwobGFiZWwpfTwvbGFiZWw+YDtcbiAgICBsZXQgcmVxdWlyZWREaXNwbGF5ID0gdmFsdWVzLnJlcXVpcmVkID8gJ3N0eWxlPVwiZGlzcGxheTppbmxpbmVcIicgOiAnJztcbiAgICBsaUNvbnRlbnRzICs9IGA8c3BhbiBjbGFzcz1cInJlcXVpcmVkLWFzdGVyaXNrXCIgJHtyZXF1aXJlZERpc3BsYXl9PiAqPC9zcGFuPmA7XG5cbiAgICBsZXQgZGVzY0F0dHJzID0ge1xuICAgICAgY2xhc3NOYW1lOiAndG9vbHRpcC1lbGVtZW50JyxcbiAgICAgIHRvb2x0aXA6IHZhbHVlcy5kZXNjcmlwdGlvbixcbiAgICAgIHN0eWxlOiB2YWx1ZXMuZGVzY3JpcHRpb24gPyAnZGlzcGxheTppbmxpbmUtYmxvY2snIDogJ2Rpc3BsYXk6bm9uZSdcbiAgICB9O1xuICAgIGxpQ29udGVudHMgKz0gYDxzcGFuICR7dXRpbHMuYXR0clN0cmluZyhkZXNjQXR0cnMpfT4/PC9zcGFuPmA7XG5cbiAgICBsaUNvbnRlbnRzICs9IG0oJ2RpdicsICcnLCB7Y2xhc3NOYW1lOiAncHJldi1ob2xkZXInfSkub3V0ZXJIVE1MO1xuICAgIGxpQ29udGVudHMgKz0gYDxkaXYgaWQ9XCIke2RhdGEubGFzdElEfS1ob2xkZXJcIiBjbGFzcz1cImZybS1ob2xkZXJcIj5gO1xuICAgIGxpQ29udGVudHMgKz0gJzxkaXYgY2xhc3M9XCJmb3JtLWVsZW1lbnRzXCI+JztcblxuICAgIGxpQ29udGVudHMgKz0gYWR2RmllbGRzKHZhbHVlcyk7XG4gICAgbGlDb250ZW50cyArPSBtKCdhJywgaTE4bi5jbG9zZSwge2NsYXNzTmFtZTogJ2Nsb3NlLWZpZWxkJ30pLm91dGVySFRNTDtcblxuICAgIGxpQ29udGVudHMgKz0gJzwvZGl2Pic7XG4gICAgbGlDb250ZW50cyArPSAnPC9kaXY+JztcblxuICAgIGxldCBmaWVsZCA9IG0oJ2xpJywgbGlDb250ZW50cywge1xuICAgICAgICAnY2xhc3MnOiB0eXBlICsgJy1maWVsZCBmb3JtLWZpZWxkJyxcbiAgICAgICAgJ3R5cGUnOiB0eXBlLFxuICAgICAgICBpZDogZGF0YS5sYXN0SURcbiAgICAgIH0pO1xuICAgIGxldCAkbGkgPSAkKGZpZWxkKTtcblxuICAgICRsaS5kYXRhKCdmaWVsZERhdGEnLCB7YXR0cnM6IHZhbHVlc30pO1xuXG4gICAgaWYgKHR5cGVvZiBoZWxwZXJzLnN0b3BJbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICQoJz4gbGknLCBkLnN0YWdlKS5lcShoZWxwZXJzLnN0b3BJbmRleCkuYmVmb3JlKCRsaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICRzdGFnZS5hcHBlbmQoJGxpKTtcbiAgICB9XG5cbiAgICAkKCcuc29ydGFibGUtb3B0aW9ucycsICRsaSlcbiAgICAuc29ydGFibGUoe3VwZGF0ZTogKCkgPT4gaGVscGVycy51cGRhdGVQcmV2aWV3KCRsaSl9KTtcblxuICAgIGhlbHBlcnMudXBkYXRlUHJldmlldygkbGkpO1xuXG4gICAgaWYgKG9wdHMudHlwZVVzZXJFdmVudHNbdHlwZV0gJiYgb3B0cy50eXBlVXNlckV2ZW50c1t0eXBlXS5vbmFkZCkge1xuICAgICAgb3B0cy50eXBlVXNlckV2ZW50c1t0eXBlXS5vbmFkZChmaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZWRpdE9uQWRkICYmIGlzTmV3KSB7XG4gICAgICBoZWxwZXJzLmNsb3NlQWxsRWRpdCgpO1xuICAgICAgaGVscGVycy50b2dnbGVFZGl0KGRhdGEubGFzdElELCBmYWxzZSk7XG4gICAgICAvLyBmaWVsZC5zY3JvbGxJbnRvVmlldygpO1xuICAgIH1cblxuICAgIGRhdGEubGFzdElEID0gaGVscGVycy5pbmNyZW1lbnRJZChkYXRhLmxhc3RJRCk7XG4gIH07XG5cbiAgLy8gU2VsZWN0IGZpZWxkIGh0bWwsIHNpbmNlIHRoZXJlIG1heSBiZSBtdWx0aXBsZVxuICBsZXQgc2VsZWN0RmllbGRPcHRpb25zID0gZnVuY3Rpb24obmFtZSwgb3B0aW9uRGF0YSwgbXVsdGlwbGVTZWxlY3QpIHtcbiAgICBsZXQgb3B0aW9uSW5wdXRUeXBlID0ge1xuICAgICAgICBzZWxlY3RlZDogKG11bHRpcGxlU2VsZWN0ID8gJ2NoZWNrYm94JyA6ICdyYWRpbycpXG4gICAgICB9O1xuICAgIGxldCBvcHRpb25EYXRhT3JkZXIgPSBbXG4gICAgICAndmFsdWUnLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgICdzZWxlY3RlZCdcbiAgICBdO1xuICAgIGxldCBvcHRpb25JbnB1dHMgPSBbXTtcbiAgICBsZXQgb3B0aW9uVGVtcGxhdGUgPSB7c2VsZWN0ZWQ6IGZhbHNlLCBsYWJlbDogJycsIHZhbHVlOiAnJ307XG5cbiAgICBvcHRpb25EYXRhID0gT2JqZWN0LmFzc2lnbihvcHRpb25UZW1wbGF0ZSwgb3B0aW9uRGF0YSk7XG5cbiAgICBmb3IgKGxldCBpID0gb3B0aW9uRGF0YU9yZGVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcHJvcCA9IG9wdGlvbkRhdGFPcmRlcltpXTtcbiAgICAgIGlmIChvcHRpb25EYXRhLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgIGxldCBhdHRycyA9IHtcbiAgICAgICAgICB0eXBlOiBvcHRpb25JbnB1dFR5cGVbcHJvcF0gfHwgJ3RleHQnLFxuICAgICAgICAgIGNsYXNzTmFtZTogJ29wdGlvbi0nICsgcHJvcCxcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uRGF0YVtwcm9wXSxcbiAgICAgICAgICBuYW1lOiBuYW1lICsgJy1vcHRpb24nXG4gICAgICAgIH07XG5cbiAgICAgICAgYXR0cnMucGxhY2Vob2xkZXIgPSBpMThuW2BwbGFjZWhvbGRlci4ke3Byb3B9YF0gfHwgJyc7XG5cbiAgICAgICAgaWYgKHByb3AgPT09ICdzZWxlY3RlZCcgJiYgb3B0aW9uRGF0YS5zZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGF0dHJzLmNoZWNrZWQgPSBvcHRpb25EYXRhLnNlbGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9uSW5wdXRzLnB1c2gobSgnaW5wdXQnLCBudWxsLCBhdHRycykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZW1vdmVBdHRycyA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ3JlbW92ZSBidG4nLFxuICAgICAgdGl0bGU6IGkxOG4ucmVtb3ZlTWVzc2FnZVxuICAgIH07XG4gICAgb3B0aW9uSW5wdXRzLnB1c2godXRpbHMubWFya3VwKCdhJywgaTE4bi5yZW1vdmUsIHJlbW92ZUF0dHJzKSk7XG5cbiAgICBsZXQgZmllbGQgPSB1dGlscy5tYXJrdXAoJ2xpJywgb3B0aW9uSW5wdXRzKTtcblxuICAgIHJldHVybiBmaWVsZC5vdXRlckhUTUw7XG4gIH07XG5cbiAgbGV0IGNsb25lSXRlbSA9IGZ1bmN0aW9uIGNsb25lSXRlbShjdXJyZW50SXRlbSkge1xuICAgIGxldCBjdXJyZW50SWQgPSBjdXJyZW50SXRlbS5hdHRyKCdpZCcpO1xuICAgIGxldCB0eXBlID0gY3VycmVudEl0ZW0uYXR0cigndHlwZScpO1xuICAgIGxldCB0cyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGxldCBjbG9uZU5hbWUgPSB0eXBlICsgJy0nICsgdHM7XG4gICAgbGV0ICRjbG9uZSA9IGN1cnJlbnRJdGVtLmNsb25lKCk7XG5cbiAgICAkY2xvbmUuZmluZCgnW2lkXScpLmVhY2goKGksIGVsZW0pID0+IHtcbiAgICAgZWxlbS5pZCA9IGVsZW0uaWQucmVwbGFjZShjdXJyZW50SWQsIGRhdGEubGFzdElEKTtcbiAgICB9KTtcblxuICAgICRjbG9uZS5maW5kKCdbZm9yXScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgIHRoaXMuc2V0QXR0cmlidXRlKCdmb3InLCB0aGlzLmdldEF0dHJpYnV0ZSgnZm9yJykucmVwbGFjZShjdXJyZW50SWQsIGRhdGEubGFzdElEKSk7XG4gICAgfSk7XG5cbiAgICAkY2xvbmUuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICQoJ2U6bm90KC5mb3JtLWVsZW1lbnRzKScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCBuZXdOYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtcbiAgICAgICAgbmV3TmFtZSA9IG5ld05hbWUuc3Vic3RyaW5nKDAsIChuZXdOYW1lLmxhc3RJbmRleE9mKCctJykgKyAxKSk7XG4gICAgICAgIG5ld05hbWUgPSBuZXdOYW1lICsgdHMudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBuZXdOYW1lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgJGNsb25lLmZpbmQoJy5mb3JtLWVsZW1lbnRzJykuZmluZCgnOmlucHV0JykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpID09PSAnbmFtZScpIHtcbiAgICAgICAgbGV0IG5ld1ZhbCA9IHRoaXMuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuICAgICAgICBuZXdWYWwgPSBuZXdWYWwuc3Vic3RyaW5nKDAsIChuZXdWYWwubGFzdEluZGV4T2YoJy0nKSArIDEpKTtcbiAgICAgICAgbmV3VmFsID0gbmV3VmFsICsgdHMudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgbmV3VmFsKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgICRjbG9uZS5hdHRyKCdpZCcsIGRhdGEubGFzdElEKTtcbiAgICAkY2xvbmUuYXR0cignbmFtZScsIGNsb25lTmFtZSk7XG4gICAgJGNsb25lLmFkZENsYXNzKCdjbG9uZWQnKTtcbiAgICAkKCcuc29ydGFibGUtb3B0aW9ucycsICRjbG9uZSkuc29ydGFibGUoKTtcblxuICAgIGlmIChvcHRzLnR5cGVVc2VyRXZlbnRzW3R5cGVdICYmIG9wdHMudHlwZVVzZXJFdmVudHNbdHlwZV0ub25jbG9uZSkge1xuICAgICAgb3B0cy50eXBlVXNlckV2ZW50c1t0eXBlXS5vbmNsb25lKCRjbG9uZVswXSk7XG4gICAgfVxuXG4gICAgZGF0YS5sYXN0SUQgPSBoZWxwZXJzLmluY3JlbWVudElkKGRhdGEubGFzdElEKTtcbiAgICByZXR1cm4gJGNsb25lO1xuICB9O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVRJTElUSUVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvLyBkZWxldGUgb3B0aW9uc1xuICAkc3RhZ2Uub24oJ2NsaWNrIHRvdWNoc3RhcnQnLCAnLnJlbW92ZScsIGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgJGZpZWxkID0gJCh0aGlzKS5wYXJlbnRzKCcuZm9ybS1maWVsZDplcSgwKScpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgb3B0aW9uc0NvdW50ID0gJCh0aGlzKS5wYXJlbnRzKCcuc29ydGFibGUtb3B0aW9uczplcSgwKScpLmNoaWxkcmVuKCdsaScpLmxlbmd0aDtcbiAgICBpZiAob3B0aW9uc0NvdW50IDw9IDIpIHtcbiAgICAgIG9wdHMubm90aWZ5LmVycm9yKCdFcnJvcjogJyArIGkxOG4ubWluT3B0aW9uTWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQodGhpcykucGFyZW50KCdsaScpLnNsaWRlVXAoJzI1MCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAkKHRoaXMpLnJlbW92ZSgpO1xuICAgICAgICBoZWxwZXJzLnVwZGF0ZVByZXZpZXcoJGZpZWxkKTtcbiAgICAgICAgaGVscGVycy5zYXZlLmNhbGwoaGVscGVycyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHRvdWNoIGZvY3VzXG4gICRzdGFnZS5vbigndG91Y2hzdGFydCcsICdpbnB1dCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgJGlucHV0ID0gJCh0aGlzKTtcbiAgICBpZiAoZS5oYW5kbGVkICE9PSB0cnVlKSB7XG4gICAgICBpZiAoJGlucHV0LmF0dHIoJ3R5cGUnKSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAkaW5wdXQudHJpZ2dlcignY2xpY2snKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRpbnB1dC5mb2N1cygpO1xuICAgICAgICBsZXQgZmllbGRWYWwgPSAkaW5wdXQudmFsKCk7XG4gICAgICAgICRpbnB1dC52YWwoZmllbGRWYWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICAvLyB0b2dnbGUgZmllbGRzXG4gICRzdGFnZS5vbignY2xpY2sgdG91Y2hzdGFydCcsICcudG9nZ2xlLWZvcm0sIC5jbG9zZS1maWVsZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoZS5oYW5kbGVkICE9PSB0cnVlKSB7XG4gICAgICBsZXQgdGFyZ2V0SUQgPSAkKGUudGFyZ2V0KS5wYXJlbnRzKCcuZm9ybS1maWVsZDplcSgwKScpLmF0dHIoJ2lkJyk7XG4gICAgICBoZWxwZXJzLnRvZ2dsZUVkaXQodGFyZ2V0SUQpO1xuICAgICAgZS5oYW5kbGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgJHN0YWdlLm9uKCdjaGFuZ2UnLCAnW25hbWU9XCJzdWJ0eXBlXCJdJywgKGUpID0+IHtcbiAgICBjb25zdCAkZmllbGQgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCdsaS5mb3JtLWZpZWxkJyk7XG4gICAgY29uc3QgJHZhbFdyYXAgPSAkKCcudmFsdWUtd3JhcCcsICRmaWVsZCk7XG4gICAgJHZhbFdyYXAudG9nZ2xlKGUudGFyZ2V0LnZhbHVlICE9PSAncXVpbGwnKTtcbiAgfSk7XG5cblxuICAkc3RhZ2Uub24oJ2NoYW5nZScsICcucHJldi1ob2xkZXIgaW5wdXQsIC5wcmV2LWhvbGRlciBzZWxlY3QsIC5wcmV2LWhvbGRlciB0ZXh0YXJlYScsIGUgPT4ge1xuICAgIGxldCBwcmV2T3B0aW9ucztcbiAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdvdGhlci1vcHRpb24nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmllbGQgPSB1dGlscy5jbG9zZXN0KGUudGFyZ2V0LCAnLmZvcm0tZmllbGQnKTtcbiAgICBpZiAodXRpbHMuaW5BcnJheShmaWVsZC50eXBlLCBbJ3NlbGVjdCcsICdjaGVja2JveC1ncm91cCcsICdyYWRpby1ncm91cCddKSkge1xuICAgICAgbGV0IG9wdGlvbnMgPSBmaWVsZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdvcHRpb24tdmFsdWUnKTtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICB1dGlscy5mb3JFYWNoKG9wdGlvbnMsIGkgPT4ge1xuICAgICAgICAgIGxldCBzZWxlY3RlZE9wdGlvbiA9IG9wdGlvbnNbaV0ucGFyZW50RWxlbWVudC5jaGlsZE5vZGVzWzBdO1xuICAgICAgICAgIHNlbGVjdGVkT3B0aW9uLmNoZWNrZWQgPSBlLnRhcmdldC52YWx1ZSA9PT0gb3B0aW9uc1tpXS52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2T3B0aW9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGUudGFyZ2V0Lm5hbWUpO1xuICAgICAgICB1dGlscy5mb3JFYWNoKHByZXZPcHRpb25zLCBpID0+IHtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zW2ldLnBhcmVudEVsZW1lbnQuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbi5jaGVja2VkID0gcHJldk9wdGlvbnNbaV0uY2hlY2tlZDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaWVsZFZhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YWx1ZS0nICsgZmllbGQuaWQpO1xuICAgICAgaWYoZmllbGRWYWwpIHtcbiAgICAgICAgZmllbGRWYWwudmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIHByZXZpZXcgdG8gbGFiZWxcbiAgdXRpbHMuYWRkRXZlbnRMaXN0ZW5lcnMoZC5zdGFnZSwgJ2tleXVwIGNoYW5nZScsIGUgPT4ge1xuICAgIGlmICghZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdmbGQtbGFiZWwnKSkgcmV0dXJuO1xuICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlIHx8IGUudGFyZ2V0LmlubmVySFRNTDtcbiAgICBsZXQgbGFiZWwgPSB1dGlscy5jbG9zZXN0KGUudGFyZ2V0LCAnLmZvcm0tZmllbGQnKS5xdWVyeVNlbGVjdG9yKCcuZmllbGQtbGFiZWwnKTtcbiAgICBsYWJlbC5pbm5lckhUTUwgPSB1dGlscy5wYXJzZWRIdG1sKHZhbHVlKTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGVycm9yIHN0eWxpbmcgd2hlbiB1c2VycyB0cmllcyB0byBjb3JyZWN0IG1pc3Rha2VcbiAgJHN0YWdlLm9uKCdrZXl1cCcsICdpbnB1dC5lcnJvcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAkKGUudGFyZ2V0KS5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIHByZXZpZXcgZm9yIGRlc2NyaXB0aW9uXG4gICRzdGFnZS5vbigna2V5dXAnLCAnaW5wdXRbbmFtZT1cImRlc2NyaXB0aW9uXCJdJywgZnVuY3Rpb24oZSkge1xuICAgIGxldCAkZmllbGQgPSAkKGUudGFyZ2V0KS5wYXJlbnRzKCcuZm9ybS1maWVsZDplcSgwKScpO1xuICAgIGxldCBjbG9zZXN0VG9vbFRpcCA9ICQoJy50b29sdGlwLWVsZW1lbnQnLCAkZmllbGQpO1xuICAgIGxldCB0dFZhbCA9ICQoZS50YXJnZXQpLnZhbCgpO1xuICAgIGlmICh0dFZhbCAhPT0gJycpIHtcbiAgICAgIGlmICghY2xvc2VzdFRvb2xUaXAubGVuZ3RoKSB7XG4gICAgICAgIGxldCB0dCA9IGA8c3BhbiBjbGFzcz1cInRvb2x0aXAtZWxlbWVudFwiIHRvb2x0aXA9XCIke3R0VmFsfVwiPj88L3NwYW4+YDtcbiAgICAgICAgJCgnLmZpZWxkLWxhYmVsJywgJGZpZWxkKS5hZnRlcih0dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZXN0VG9vbFRpcC5hdHRyKCd0b29sdGlwJywgdHRWYWwpLmNzcygnZGlzcGxheScsICdpbmxpbmUtYmxvY2snKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNsb3Nlc3RUb29sVGlwLmxlbmd0aCkge1xuICAgICAgICBjbG9zZXN0VG9vbFRpcC5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBtdWx0aXBsZSBzZWxlY3Qgb3B0aW9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGUgY2xpY2sgZXZlbnRcbiAgICogQHJldHVybiB7U3RyaW5nfSBuZXdUeXBlXG4gICAqL1xuICAkc3RhZ2Uub24oJ2NoYW5nZScsICcuZmxkLW11bHRpcGxlJywgZSA9PiB7XG4gICAgbGV0IG5ld1R5cGUgPSBlLnRhcmdldC5jaGVja2VkID8gJ2NoZWNrYm94JyA6ICdyYWRpbyc7XG4gICAgbGV0ICRvcHRpb25zID0gJCgnLm9wdGlvbi1zZWxlY3RlZCcsICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5mb3JtLWVsZW1lbnRzJykpO1xuICAgICRvcHRpb25zLmVhY2goaSA9PiAkb3B0aW9uc1tpXS50eXBlID0gbmV3VHlwZSk7XG4gICAgcmV0dXJuIG5ld1R5cGU7XG4gIH0pO1xuXG4gIC8vIGZvcm1hdCBuYW1lIGF0dHJpYnV0ZVxuICAkc3RhZ2Uub24oJ2JsdXInLCAnaW5wdXQuZmxkLW5hbWUnLCBmdW5jdGlvbihlKSB7XG4gICAgZS50YXJnZXQudmFsdWUgPSB1dGlscy5zYWZlbmFtZShlLnRhcmdldC52YWx1ZSk7XG4gICAgaWYgKGUudGFyZ2V0LnZhbHVlID09PSAnJykge1xuICAgICAgJChlLnRhcmdldClcbiAgICAgIC5hZGRDbGFzcygnZmllbGQtZXJyb3InKVxuICAgICAgLmF0dHIoJ3BsYWNlaG9sZGVyJywgaTE4bi5jYW5ub3RCZUVtcHR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJChlLnRhcmdldCkucmVtb3ZlQ2xhc3MoJ2ZpZWxkLWVycm9yJyk7XG4gICAgfVxuICB9KTtcblxuICAkc3RhZ2Uub24oJ2JsdXInLCAnaW5wdXQuZmxkLW1heGxlbmd0aCcsIGUgPT4ge1xuICAgIGUudGFyZ2V0LnZhbHVlID0gdXRpbHMuZm9yY2VOdW1iZXIoZS50YXJnZXQudmFsdWUpO1xuICB9KTtcblxuICAvLyBDb3B5IGZpZWxkXG4gICRzdGFnZS5vbignY2xpY2sgdG91Y2hzdGFydCcsICcuaWNvbi1jb3B5JywgZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgY3VycmVudEl0ZW0gPSAkKGUudGFyZ2V0KS5wYXJlbnQoKS5wYXJlbnQoJ2xpJyk7XG4gICAgbGV0ICRjbG9uZSA9IGNsb25lSXRlbShjdXJyZW50SXRlbSk7XG4gICAgJGNsb25lLmluc2VydEFmdGVyKGN1cnJlbnRJdGVtKTtcbiAgICBoZWxwZXJzLnVwZGF0ZVByZXZpZXcoJGNsb25lKTtcbiAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcbiAgfSk7XG5cbiAgLy8gRGVsZXRlIGZpZWxkXG4gICRzdGFnZS5vbignY2xpY2sgdG91Y2hzdGFydCcsICcuZGVsZXRlLWNvbmZpcm0nLCBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBidXR0b25Qb3NpdGlvbiA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHBhZ2VYOiBidXR0b25Qb3NpdGlvbi5sZWZ0ICsgKGJ1dHRvblBvc2l0aW9uLndpZHRoIC8gMiksXG4gICAgICAgIHBhZ2VZOiAoYnV0dG9uUG9zaXRpb24udG9wIC0gYm9keVJlY3QudG9wKSAtIDEyXG4gICAgICB9O1xuXG4gICAgbGV0IGRlbGV0ZUlEID0gJChlLnRhcmdldCkucGFyZW50cygnLmZvcm0tZmllbGQ6ZXEoMCknKS5hdHRyKCdpZCcpO1xuICAgIGNvbnN0ICRmaWVsZCA9ICQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVsZXRlSUQpKTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vZGFsQ2xvc2VkJywgZnVuY3Rpb24oKSB7XG4gICAgICAkZmllbGQucmVtb3ZlQ2xhc3MoJ2RlbGV0aW5nJyk7XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdXNlciBpcyBzdXJlIHRoZXkgd2FudCB0byByZW1vdmUgdGhlIGZpZWxkXG4gICAgaWYgKG9wdHMuZmllbGRSZW1vdmVXYXJuKSB7XG4gICAgICBsZXQgd2FybkgzID0gdXRpbHMubWFya3VwKCdoMycsIGkxOG4ud2FybmluZyk7XG4gICAgICBsZXQgd2Fybk1lc3NhZ2UgPSB1dGlscy5tYXJrdXAoJ3AnLCBpMThuLmZpZWxkUmVtb3ZlV2FybmluZyk7XG4gICAgICBoZWxwZXJzLmNvbmZpcm0oW3dhcm5IMywgd2Fybk1lc3NhZ2VdLCAoKSA9PlxuICAgICAgICBoZWxwZXJzLnJlbW92ZUZpZWxkKGRlbGV0ZUlEKSwgY29vcmRzKTtcbiAgICAgICRmaWVsZC5hZGRDbGFzcygnZGVsZXRpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVscGVycy5yZW1vdmVGaWVsZChkZWxldGVJRCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBVcGRhdGUgYnV0dG9uIHN0eWxlIHNlbGVjdGlvblxuICAkc3RhZ2Uub24oJ2NsaWNrJywgJy5zdHlsZS13cmFwIGJ1dHRvbicsIGUgPT4ge1xuICAgIGNvbnN0ICRidXR0b24gPSAkKGUudGFyZ2V0KTtcbiAgICBsZXQgc3R5bGVWYWwgPSAkYnV0dG9uLnZhbCgpO1xuICAgIGxldCAkYnRuU3R5bGUgPSAkYnV0dG9uLnBhcmVudCgpLnByZXYoJy5idG4tc3R5bGUnKTtcbiAgICAkYnRuU3R5bGUudmFsKHN0eWxlVmFsKTtcbiAgICAkYnV0dG9uLnNpYmxpbmdzKCcuYnRuJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgJGJ1dHRvbi5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICBoZWxwZXJzLnVwZGF0ZVByZXZpZXcoJGJ0blN0eWxlLmNsb3Nlc3QoJy5mb3JtLWZpZWxkJykpO1xuICAgIGhlbHBlcnMuc2F2ZS5jYWxsKGhlbHBlcnMpO1xuICB9KTtcblxuICAvLyBBdHRhY2ggYSBjYWxsYmFjayB0byB0b2dnbGUgcmVxdWlyZWQgYXN0ZXJpc2tcbiAgJHN0YWdlLm9uKCdjbGljaycsICcuZmxkLXJlcXVpcmVkJywgZSA9PiB7XG4gICAgJChlLnRhcmdldCkuY2xvc2VzdCgnLmZvcm0tZmllbGQnKS5maW5kKCcucmVxdWlyZWQtYXN0ZXJpc2snKS50b2dnbGUoKTtcbiAgfSk7XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgdG8gdG9nZ2xlIHJvbGVzIHZpc2liaWxpdHlcbiAgJHN0YWdlLm9uKCdjbGljaycsICdpbnB1dC5mbGQtYWNjZXNzJywgZnVuY3Rpb24oZSkge1xuICAgIGxldCByb2xlcyA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5mb3JtLWZpZWxkJykuZmluZCgnLmF2YWlsYWJsZS1yb2xlcycpO1xuICAgIGxldCBlbmFibGVSb2xlc0NCID0gJChlLnRhcmdldCk7XG4gICAgcm9sZXMuc2xpZGVUb2dnbGUoMjUwLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghZW5hYmxlUm9sZXNDQi5pcygnOmNoZWNrZWQnKSkge1xuICAgICAgICAkKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nLCByb2xlcykucmVtb3ZlQXR0cignY2hlY2tlZCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvLyBBdHRhY2ggYSBjYWxsYmFjayB0byBhZGQgbmV3IG9wdGlvbnNcbiAgJHN0YWdlLm9uKCdjbGljaycsICcuYWRkLW9wdCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0ICRvcHRpb25XcmFwID0gJChlLnRhcmdldCkuY2xvc2VzdCgnLmZpZWxkLW9wdGlvbnMnKTtcbiAgICBsZXQgJG11bHRpcGxlID0gJCgnW25hbWU9XCJtdWx0aXBsZVwiXScsICRvcHRpb25XcmFwKTtcbiAgICBsZXQgJGZpcnN0T3B0aW9uID0gJCgnLm9wdGlvbi1zZWxlY3RlZDplcSgwKScsICRvcHRpb25XcmFwKTtcbiAgICBsZXQgaXNNdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCRtdWx0aXBsZS5sZW5ndGgpIHtcbiAgICAgIGlzTXVsdGlwbGUgPSAkbXVsdGlwbGUucHJvcCgnY2hlY2tlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc011bHRpcGxlID0gKCRmaXJzdE9wdGlvbi5hdHRyKCd0eXBlJykgPT09ICdjaGVja2JveCcpO1xuICAgIH1cblxuICAgIGxldCBuYW1lID0gJGZpcnN0T3B0aW9uLmF0dHIoJ25hbWUnKTtcblxuICAgICQoJy5zb3J0YWJsZS1vcHRpb25zJywgJG9wdGlvbldyYXApLmFwcGVuZChzZWxlY3RGaWVsZE9wdGlvbnMobmFtZSwgZmFsc2UsIGlzTXVsdGlwbGUpKTtcbiAgfSk7XG5cbiAgJHN0YWdlLm9uKCdtb3VzZW92ZXIgbW91c2VvdXQnLCAnLnJlbW92ZSwgLmRlbC1idXR0b24nLCBlID0+XG4gICAgJChlLnRhcmdldCkuY2xvc2VzdCgnbGknKS50b2dnbGVDbGFzcygnZGVsZXRlJykpO1xuXG4gIGxvYWRGaWVsZHMoKTtcblxuICAkc3RhZ2UuY3NzKCdtaW4taGVpZ2h0JywgJGNiVUwuaGVpZ2h0KCkpO1xuXG4gIC8vIElmIG9wdGlvbiBzZXQsIGNvbnRyb2xzIHdpbGwgcmVtYWluIGluIHZpZXcgaW4gZWRpdG9yXG4gIGlmIChvcHRzLnN0aWNreUNvbnRyb2xzLmVuYWJsZSkge1xuICAgIGhlbHBlcnMuc3RpY2t5Q29udHJvbHMoJHN0YWdlKTtcbiAgfVxuXG4gIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnRzLmxvYWRlZCk7XG5cbiAgLy8gTWFrZSBhY3Rpb25zIGFjY2Vzc2libGVcbiAgZm9ybUJ1aWxkZXIuYWN0aW9ucyA9IHtcbiAgICBjbGVhckZpZWxkczogYW5pbWF0ZSA9PiBoZWxwZXJzLnJlbW92ZUFsbEZpZWxkcyhkLnN0YWdlLCBhbmltYXRlKSxcbiAgICBzaG93RGF0YTogaGVscGVycy5zaG93RGF0YS5iaW5kKGhlbHBlcnMpLFxuICAgIHNhdmU6IGhlbHBlcnMuc2F2ZS5iaW5kKGhlbHBlcnMpLFxuICAgIGFkZEZpZWxkOiAoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICBoZWxwZXJzLnN0b3BJbmRleCA9IGRhdGEuZm9ybURhdGEubGVuZ3RoID8gaW5kZXggOiB1bmRlZmluZWQ7XG4gICAgICBwcmVwRmllbGRWYXJzKGZpZWxkKTtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnRzLmZpZWxkQWRkZWQpO1xuICAgIH0sXG4gICAgcmVtb3ZlRmllbGQ6IGhlbHBlcnMucmVtb3ZlRmllbGQuYmluZChoZWxwZXJzKSxcbiAgICBnZXREYXRhOiAodHlwZSA9ICdqcycpID0+IHtcbiAgICAgIGNvbnN0IHN0YWdlID0gZC5zdGFnZTtcbiAgICAgIGNvbnN0IGggPSBoZWxwZXJzO1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAganM6ICgpID0+IGgucHJlcERhdGEoc3RhZ2UpLFxuICAgICAgICB4bWw6ICgpID0+IGgueG1sU2F2ZShzdGFnZSksXG4gICAgICAgIGpzb246ICgpID0+IHdpbmRvdy5KU09OLnN0cmluZ2lmeShoLnByZXBEYXRhKHN0YWdlKSwgbnVsbCwgJ1xcdCcpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZGF0YVt0eXBlXSgpO1xuICAgIH0sXG4gICAgc2V0RGF0YTogZm9ybURhdGEgPT4ge1xuICAgICAgaGVscGVycy5yZW1vdmVBbGxGaWVsZHMoZC5zdGFnZSwgZmFsc2UpO1xuICAgICAgbG9hZEZpZWxkcyhmb3JtRGF0YSk7XG4gICAgfSxcbiAgICBzZXRMYW5nOiBhc3luYyBsb2NhbGUgPT4ge1xuICAgICAgYXdhaXQgbWkxOG4uc2V0Q3VycmVudC5jYWxsKG1pMThuLCBsb2NhbGUpO1xuICAgICAgZC5lbXB0eShlbGVtZW50KTtcbiAgICAgIGxldCBmb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcihvcmlnaW5hbE9wdHMsIGVsZW1lbnQpO1xuICAgICAgJChlbGVtZW50KS5kYXRhKCdmb3JtQnVpbGRlcicsIGZvcm1CdWlsZGVyKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGZvcm1CdWlsZGVyO1xufTtcblxuXG4oZnVuY3Rpb24oICQgKSB7XG4gICQuZm4uZm9ybUJ1aWxkZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIGxldCBlbGVtcyA9IHRoaXM7XG4gICAgbGV0IHtpMThuLCAuLi5vcHRzfSA9ICQuZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucywgdHJ1ZSk7XG4gICAgY29uZmlnLm9wdHMgPSBvcHRzO1xuICAgIGxldCBpMThuT3B0cyA9ICQuZXh0ZW5kKHt9LCBkZWZhdWx0STE4biwgaTE4biwgdHJ1ZSk7XG4gICAgbGV0IGluc3RhbmNlID0ge1xuICAgICAgYWN0aW9uczoge1xuICAgICAgICBnZXREYXRhOiBudWxsLFxuICAgICAgICBzZXREYXRhOiBudWxsLFxuICAgICAgICBzYXZlOiBudWxsLFxuICAgICAgICBzaG93RGF0YTogbnVsbCxcbiAgICAgICAgc2V0TGFuZzogbnVsbCxcbiAgICAgICAgYWRkRmllbGQ6IG51bGwsXG4gICAgICAgIHJlbW92ZUZpZWxkOiBudWxsLFxuICAgICAgICBjbGVhckZpZWxkczogbnVsbFxuICAgICAgfSxcbiAgICAgIGdldCBmb3JtRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmFjdGlvbnMuZ2V0RGF0YSgnanNvbicpO1xuICAgICAgfSxcbiAgICAgIHByb21pc2U6IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBtaTE4bi5pbml0KGkxOG5PcHRzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBlbGVtcy5lYWNoKGkgPT4ge1xuICAgICAgICAgICAgbGV0IGZvcm1CdWlsZGVyID0gbmV3IEZvcm1CdWlsZGVyKG9wdHMsIGVsZW1zW2ldKTtcbiAgICAgICAgICAgICQoZWxlbXNbaV0pLmRhdGEoJ2Zvcm1CdWlsZGVyJywgZm9ybUJ1aWxkZXIpO1xuICAgICAgICAgICAgaW5zdGFuY2UuYWN0aW9ucyA9IGZvcm1CdWlsZGVyLmFjdGlvbnM7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGVsZXRlIGluc3RhbmNlLnByb21pc2U7XG4gICAgICAgICAgcmVzb2x2ZShpbnN0YW5jZSk7XG4gICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59KSggalF1ZXJ5ICk7XG4iLCJpbXBvcnQge2luc3RhbmNlRG9tLCBkZWZhdWx0U3VidHlwZXMsIGVtcHR5LCBvcHRpb25GaWVsZHNSZWdFeH0gZnJvbSAnLi9kb20nO1xuaW1wb3J0IHtpbnN0YW5jZURhdGF9IGZyb20gJy4vZGF0YSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgZXZlbnRzIGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCBtaTE4biBmcm9tICdtaTE4bic7XG5pbXBvcnQge2NvbmZpZ30gZnJvbSAnLi9jb25maWcnO1xuXG5jb25zdCBvcHRzID0gY29uZmlnLm9wdHM7XG5jb25zdCBtID0gdXRpbHMubWFya3VwO1xuXG4vKipcbiAqIFV0aWxpdGllcyBzcGVjaWZpYyB0byBmb3JtLWJ1aWxkZXIuanNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGVscGVycyB7XG4gIC8qKlxuICAgKiBTZXR1cCBkZWZhdWx0cywgZ2V0IGluc3RhbmNlIGRhdGEgYW5kIGRvbVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGZvcm1JRCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihmb3JtSUQpIHtcbiAgICB0aGlzLmRhdGEgPSBpbnN0YW5jZURhdGFbZm9ybUlEXTtcbiAgICB0aGlzLmQgPSBpbnN0YW5jZURvbVtmb3JtSURdO1xuICAgIHRoaXMuZG9DYW5jZWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3Igd2hlbiBhIGRyYWcgYmVnaW5zXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSB1aVxuICAgKi9cbiAgc3RhcnRNb3ZpbmcoZXZlbnQsIHVpKSB7XG4gICAgdWkuaXRlbS5zaG93KCkuYWRkQ2xhc3MoJ21vdmluZycpO1xuICAgIHRoaXMuZG9DYW5jZWwgPSB0cnVlO1xuICAgIHRoaXMuZnJvbSA9IHVpLml0ZW0ucGFyZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHdoZW4gYSBkcmFnIGVuZHNcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBldmVudFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHVpXG4gICAqL1xuICBzdG9wTW92aW5nKGV2ZW50LCB1aSkge1xuICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgdWkuaXRlbS5yZW1vdmVDbGFzcygnbW92aW5nJyk7XG4gICAgaWYgKF90aGlzLmRvQ2FuY2VsKSB7XG4gICAgICBpZiAodWkuc2VuZGVyKSB7XG4gICAgICAgICQodWkuc2VuZGVyKS5zb3J0YWJsZSgnY2FuY2VsJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmZyb20uc29ydGFibGUoJ2NhbmNlbCcpO1xuICAgIH1cbiAgICBfdGhpcy5zYXZlKCk7XG4gICAgX3RoaXMuZG9DYW5jZWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBqUXVlcnkgVUkgc29ydGFibGUgYmVmb3JlU3RvcCBjYWxsYmFjayB1c2VkIGZvciBib3RoIGxpc3RzLlxuICAgKiBMb2dpYyBmb3IgY2FuY2VsaW5nIHRoZSBzb3J0IG9yIGRyb3AuXG4gICAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSB1aVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgYmVmb3JlU3RvcChldmVudCwgdWkpIHtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgIGNvbnN0IG9wdHMgPSBjb25maWcub3B0cztcbiAgICBjb25zdCBmb3JtID0gX3RoaXMuZC5zdGFnZTtcbiAgICBsZXQgbGFzdEluZGV4ID0gZm9ybS5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG4gICAgbGV0IGNhbmNlbEFycmF5ID0gW107XG4gICAgX3RoaXMuc3RvcEluZGV4ID0gdWkucGxhY2Vob2xkZXIuaW5kZXgoKSAtIDE7XG5cbiAgICBpZiAoIW9wdHMuc29ydGFibGVDb250cm9scyAmJiB1aS5pdGVtLnBhcmVudCgpLmhhc0NsYXNzKCdmcm1iLWNvbnRyb2wnKSkge1xuICAgICAgY2FuY2VsQXJyYXkucHVzaCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5wcmVwZW5kKSB7XG4gICAgICBjYW5jZWxBcnJheS5wdXNoKF90aGlzLnN0b3BJbmRleCA9PT0gMCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuYXBwZW5kKSB7XG4gICAgICBjYW5jZWxBcnJheS5wdXNoKChfdGhpcy5zdG9wSW5kZXggKyAxKSA9PT0gbGFzdEluZGV4KTtcbiAgICB9XG5cbiAgICBfdGhpcy5kb0NhbmNlbCA9IGNhbmNlbEFycmF5LnNvbWUoZWxlbSA9PiBlbGVtID09PSB0cnVlKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIGdldCBlbGVtZW50IHR5cGUgYW5kIHN1YnR5cGVcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAkZmllbGRcbiAgICogQHJldHVybiB7T2JqZWN0fSB7dHlwZTogJ2ZpZWxkVHlwZScsIHN1YnR5cGU6ICdmaWVsZFN1YlR5cGUnfVxuICAgKi9cbiAgZ2V0VHlwZXMoJGZpZWxkKSB7XG4gICAgbGV0IHR5cGVzID0ge1xuICAgICAgICB0eXBlOiAkZmllbGQuYXR0cigndHlwZScpXG4gICAgICB9O1xuICAgIGxldCBzdWJ0eXBlID0gJCgnLmZsZC1zdWJ0eXBlJywgJGZpZWxkKS52YWwoKTtcblxuICAgIGlmIChzdWJ0eXBlICE9PSB0eXBlcy50eXBlKSB7XG4gICAgICB0eXBlcy5zdWJ0eXBlID0gc3VidHlwZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9wdGlvbiBkYXRhIGZvciBhIGZpZWxkXG4gICAqIEBwYXJhbSAge09iamVjdH0gZmllbGQgalF1ZXJ5IGZpZWxkIG9iamVjdFxuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgIEFycmF5IG9mIG9wdGlvbiB2YWx1ZXNcbiAgICovXG4gIGZpZWxkT3B0aW9uRGF0YShmaWVsZCkge1xuICAgIGxldCBvcHRpb25zID0gW107XG5cbiAgICAkKCcuc29ydGFibGUtb3B0aW9ucyBsaScsIGZpZWxkKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgbGV0ICRvcHRpb24gPSAkKHRoaXMpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSAkKCcub3B0aW9uLXNlbGVjdGVkJywgJG9wdGlvbikuaXMoJzpjaGVja2VkJyk7XG4gICAgICBsZXQgYXR0cnMgPSB7XG4gICAgICAgICAgbGFiZWw6ICQoJy5vcHRpb24tbGFiZWwnLCAkb3B0aW9uKS52YWwoKSxcbiAgICAgICAgICB2YWx1ZTogJCgnLm9wdGlvbi12YWx1ZScsICRvcHRpb24pLnZhbCgpXG4gICAgICAgIH07XG5cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICBhdHRycy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLnB1c2goYXR0cnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogWE1MIHNhdmVcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBmb3JtIHNvcnRhYmxlRmllbGRzIG5vZGVcbiAgICogQHJldHVybiB7U3RyaW5nfSB4bWwgaW4gc3RyaW5nXG4gICAqL1xuICB4bWxTYXZlKGZvcm0pIHtcbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLnByZXBEYXRhKGZvcm0pO1xuICAgIGxldCB4bWwgPSBbJzxmb3JtLXRlbXBsYXRlPlxcblxcdDxmaWVsZHM+J107XG5cbiAgICB1dGlscy5mb3JFYWNoKGZvcm1EYXRhLCBmdW5jdGlvbihmaWVsZEluZGV4LCBmaWVsZCkge1xuICAgICAgbGV0IGZpZWxkQ29udGVudCA9IG51bGw7XG4gICAgICBjb25zdCBvcHRpb25GaWVsZHMgPSBvcHRpb25GaWVsZHNSZWdFeDtcblxuICAgICAgLy8gSGFuZGxlIG9wdGlvbnNcbiAgICAgIGlmIChmaWVsZC50eXBlLm1hdGNoKG9wdGlvbkZpZWxkcykpIHtcbiAgICAgICAgbGV0IG9wdGlvbkRhdGEgPSBmaWVsZC52YWx1ZXM7XG4gICAgICAgIGxldCBvcHRpb25zID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25EYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbiA9IG0oJ29wdGlvbicsIG9wdGlvbkRhdGFbaV0ubGFiZWwsIG9wdGlvbkRhdGFbaV0pLm91dGVySFRNTDtcbiAgICAgICAgICBvcHRpb25zLnB1c2goJ1xcblxcdFxcdFxcdCcgKyBvcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMucHVzaCgnXFxuXFx0XFx0Jyk7XG5cbiAgICAgICAgZmllbGRDb250ZW50ID0gb3B0aW9ucy5qb2luKCcnKTtcbiAgICAgICAgZGVsZXRlIGZpZWxkLnZhbHVlcztcbiAgICAgIH1cblxuICAgICAgbGV0IHhtbEZpZWxkID0gbSgnZmllbGQnLCBmaWVsZENvbnRlbnQsIGZpZWxkKTtcbiAgICAgIHhtbC5wdXNoKCdcXG5cXHRcXHQnICsgeG1sRmllbGQub3V0ZXJIVE1MKTtcbiAgICB9KTtcblxuICAgIHhtbC5wdXNoKCdcXG5cXHQ8L2ZpZWxkcz5cXG48L2Zvcm0tdGVtcGxhdGU+Jyk7XG5cbiAgICByZXR1cm4geG1sLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmb3JtRGF0YSBmcm9tIGVkaXRvciBpbiBKUyBPYmplY3QgZm9ybWF0XG4gICAqIEBwYXJhbSAge09iamVjdH0gZm9ybSBha2Egc3RhZ2UsIERPTSBlbGVtZW50XG4gICAqIEByZXR1cm4ge09iamVjdH0gZm9ybURhdGFcbiAgICovXG4gIHByZXBEYXRhKGZvcm0pIHtcbiAgICBsZXQgZm9ybURhdGEgPSBbXTtcbiAgICBsZXQgZCA9IHRoaXMuZDtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKGZvcm0uY2hpbGROb2Rlcy5sZW5ndGggIT09IDApIHtcbiAgICAgIC8vIGJ1aWxkIGRhdGEgb2JqZWN0XG4gICAgICB1dGlscy5mb3JFYWNoKGZvcm0uY2hpbGROb2RlcywgYXN5bmMgZnVuY3Rpb24oaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGxldCAkZmllbGQgPSAkKGZpZWxkKTtcblxuICAgICAgICBpZiAoISgkZmllbGQuaGFzQ2xhc3MoJ2Rpc2FibGVkLWZpZWxkJykpKSB7XG4gICAgICAgICAgbGV0IGZpZWxkRGF0YSA9IF90aGlzLmdldFR5cGVzKCRmaWVsZCk7XG4gICAgICAgICAgbGV0IHJvbGVWYWxzID0gJCgnLnJvbGVzLWZpZWxkOmNoZWNrZWQnLCBmaWVsZCkubWFwKGVsZW0gPT4gZWxlbS52YWx1ZSkuZ2V0KCk7XG5cbiAgICAgICAgICBfdGhpcy5zZXRBdHRyVmFscyhmaWVsZCwgZmllbGREYXRhKTtcblxuICAgICAgICAgIGlmIChmaWVsZERhdGEuc3VidHlwZSkge1xuICAgICAgICAgICAgaWYgKGZpZWxkRGF0YS5zdWJ0eXBlID09PSAncXVpbGwnKSB7XG4gICAgICAgICAgICAgIGxldCBpZCA9IGAke2ZpZWxkRGF0YS5uYW1lfS1wcmV2aWV3YDtcbiAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mYkVkaXRvcnMucXVpbGxbaWRdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gd2luZG93LmZiRWRpdG9ycy5xdWlsbFtpZF0uaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGluc3RhbmNlLmdldENvbnRlbnRzKCk7XG4gICAgICAgICAgICAgICAgZmllbGREYXRhLnZhbHVlID0gd2luZG93LkpTT04uc3RyaW5naWZ5KGRhdGEub3BzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmKGZpZWxkRGF0YS5zdWJ0eXBlID09PSAndGlueW1jZScgJiYgd2luZG93LnRpbnltY2UpIHtcbiAgICAgICAgICAgICAgbGV0IGlkID0gYCR7ZmllbGREYXRhLm5hbWV9LXByZXZpZXdgO1xuICAgICAgICAgICAgICBpZiAod2luZG93LnRpbnltY2UuZWRpdG9yc1tpZF0pIHtcbiAgICAgICAgICAgICAgICBsZXQgZWRpdG9yID0gd2luZG93LnRpbnltY2UuZWRpdG9yc1tpZF07XG4gICAgICAgICAgICAgICAgZmllbGREYXRhLnZhbHVlID0gZWRpdG9yLmdldENvbnRlbnQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyb2xlVmFscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZpZWxkRGF0YS5yb2xlID0gcm9sZVZhbHMuam9pbignLCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkRGF0YS5jbGFzc05hbWUgPSBmaWVsZERhdGEuY2xhc3NOYW1lIHx8IGZpZWxkRGF0YS5jbGFzcztcblxuICAgICAgICAgIGxldCBtYXRjaCA9IC8oPzpefFxccylidG4tKC4qPykoPzpcXHN8JCkvZy5leGVjKGZpZWxkRGF0YS5jbGFzc05hbWUpO1xuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZmllbGREYXRhLnN0eWxlID0gbWF0Y2hbMV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmllbGREYXRhID0gdXRpbHMudHJpbU9iaihmaWVsZERhdGEpO1xuXG4gICAgICAgICAgbGV0IG11bHRpcGxlRmllbGQgPSBmaWVsZERhdGEudHlwZS5tYXRjaChkLm9wdGlvbkZpZWxkc1JlZ0V4KTtcblxuICAgICAgICAgIGlmIChtdWx0aXBsZUZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZERhdGEudmFsdWVzID0gX3RoaXMuZmllbGRPcHRpb25EYXRhKCRmaWVsZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9ybURhdGEucHVzaChmaWVsZERhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuZCBzZXQgdGhlIGRhdGEgZm9yIGFuIGVkaXRvci4gTWFpbmx5XG4gICAqIGEgd3JhcHBlciBmb3IgaGFuZGxpbmcgZGF0YVR5cGUgb3B0aW9uXG4gICAqIEBwYXJhbSAge09iamVjdH0gZm9ybURhdGFcbiAgICogQHJldHVybiB7T2JqZWN0fSBmb3JtRGF0YVxuICAgKi9cbiAgZ2V0RGF0YShmb3JtRGF0YSkge1xuICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGlmICghZm9ybURhdGEpIHtcbiAgICAgIGZvcm1EYXRhID0gY29uZmlnLm9wdHMuZm9ybURhdGE7XG4gICAgfVxuXG4gICAgaWYgKCFmb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBzZXREYXRhID0ge1xuICAgICAgeG1sOiBmb3JtRGF0YSA9PiB1dGlscy5wYXJzZVhNTChmb3JtRGF0YSksXG4gICAgICBqc29uOiBmb3JtRGF0YSA9PiB3aW5kb3cuSlNPTi5wYXJzZShmb3JtRGF0YSlcbiAgICB9O1xuXG4gICAgZGF0YS5mb3JtRGF0YSA9IHNldERhdGFbY29uZmlnLm9wdHMuZGF0YVR5cGVdKGZvcm1EYXRhKSB8fCBbXTtcblxuICAgIHJldHVybiBkYXRhLmZvcm1EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGFuZCByZXR1cm5zIGZvcm1EYXRhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGFnZSBET00gZWxlbWVudFxuICAgKiBAcmV0dXJuIHtYTUx8SlNPTn0gZm9ybURhdGFcbiAgICovXG4gIHNhdmUoc3RhZ2UpIHtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGlmKCFzdGFnZSkge1xuICAgICAgc3RhZ2UgPSB0aGlzLmQuc3RhZ2U7XG4gICAgfVxuICAgIGxldCBkb1NhdmUgPSB7XG4gICAgICB4bWw6ICgpID0+IF90aGlzLnhtbFNhdmUoc3RhZ2UpLFxuICAgICAganNvbjogKCkgPT5cbiAgICAgIHdpbmRvdy5KU09OLnN0cmluZ2lmeShfdGhpcy5wcmVwRGF0YShzdGFnZSksIG51bGwsICdcXHQnKVxuICAgIH07XG5cbiAgICAvLyBzYXZlIGFjdGlvbiBmb3IgY3VycmVudCBgZGF0YVR5cGVgXG4gICAgZGF0YS5mb3JtRGF0YSA9IGRvU2F2ZVtjb25maWcub3B0cy5kYXRhVHlwZV0oc3RhZ2UpO1xuXG4gICAgLy8gdHJpZ2dlciBmb3JtU2F2ZWQgZXZlbnRcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5mb3JtU2F2ZWQpO1xuICAgIHJldHVybiBkYXRhLmZvcm1EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIGluY3JlbWVudHMgdGhlIGZpZWxkIGlkcyB3aXRoIHN1cHBvcnQgZm9yIG11bHRpcGxlIGVkaXRvcnNcbiAgICogQHBhcmFtICB7U3RyaW5nfSBpZCBmaWVsZCBJRFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgIGluY3JlbWVudGVkIGZpZWxkIElEXG4gICAqL1xuICBpbmNyZW1lbnRJZChpZCkge1xuICAgIGxldCBzcGxpdCA9IGlkLmxhc3RJbmRleE9mKCctJyk7XG4gICAgbGV0IG5ld0ZpZWxkTnVtYmVyID0gcGFyc2VJbnQoaWQuc3Vic3RyaW5nKHNwbGl0ICsgMSkpICsgMTtcbiAgICBsZXQgYmFzZVN0cmluZyA9IGlkLnN1YnN0cmluZygwLCBzcGxpdCk7XG5cbiAgICByZXR1cm4gYCR7YmFzZVN0cmluZ30tJHtuZXdGaWVsZE51bWJlcn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWVzIGZvciBmaWVsZCBhdHRyaWJ1dGVzIGluIHRoZSBlZGl0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGZpZWxkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZERhdGFcbiAgICovXG4gIHNldEF0dHJWYWxzKGZpZWxkLCBmaWVsZERhdGEpIHtcbiAgICBsZXQgYXR0cnMgPSBmaWVsZC5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3MqPVwiZmxkLVwiXScpO1xuICAgIGF0dHJzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICBsZXQgdmFsdWU7XG4gICAgICBsZXQgbmFtZSA9IHV0aWxzLmNhbWVsQ2FzZShhdHRyLmdldEF0dHJpYnV0ZSgnbmFtZScpKTtcbiAgICAgIGlmIChhdHRyLmF0dHJpYnV0ZXNbJ2NvbnRlbnRlZGl0YWJsZSddKSB7XG4gICAgICAgIHZhbHVlID0gYXR0ci5pbm5lckhUTUw7XG4gICAgICB9IGVsc2UgaWYgKGF0dHIudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICB2YWx1ZSA9IGF0dHIuY2hlY2tlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gYXR0ci52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGZpZWxkRGF0YVtuYW1lXSA9IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3QgZmllbGQgYXR0cmlidXRlIHZhbHVlcyBhbmQgY2FsbCBmaWVsZFByZXZpZXcgdG8gZ2VuZXJhdGUgcHJldmlld1xuICAgKiBAcGFyYW0gIHtPYmplY3R9ICRmaWVsZCBqUXVlcnkgRE9NIGVsZW1lbnRcbiAgICovXG4gIHVwZGF0ZVByZXZpZXcoJGZpZWxkKSB7XG4gICAgbGV0IF90aGlzID0gdGhpcztcbiAgICBsZXQgZCA9IHRoaXMuZDtcbiAgICBjb25zdCBmaWVsZENsYXNzID0gJGZpZWxkLmF0dHIoJ2NsYXNzJyk7XG4gICAgbGV0IGZpZWxkID0gJGZpZWxkWzBdO1xuICAgIGlmIChmaWVsZENsYXNzLmluZGV4T2YoJ2lucHV0LWNvbnRyb2wnKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZmllbGRUeXBlID0gJGZpZWxkLmF0dHIoJ3R5cGUnKTtcbiAgICBsZXQgJHByZXZIb2xkZXIgPSAkKCcucHJldi1ob2xkZXInLCBmaWVsZCk7XG4gICAgbGV0IHByZXZpZXdEYXRhID0ge1xuICAgICAgdHlwZTogZmllbGRUeXBlXG4gICAgfTtcbiAgICBsZXQgcHJldmlldztcblxuICAgIF90aGlzLnNldEF0dHJWYWxzKGZpZWxkLCBwcmV2aWV3RGF0YSk7XG5cbiAgICBsZXQgc3R5bGUgPSAkKCcuYnRuLXN0eWxlJywgZmllbGQpLnZhbCgpO1xuICAgIGlmIChzdHlsZSkge1xuICAgICAgcHJldmlld0RhdGEuc3R5bGUgPSBzdHlsZTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGRUeXBlLm1hdGNoKGQub3B0aW9uRmllbGRzUmVnRXgpKSB7XG4gICAgICBwcmV2aWV3RGF0YS52YWx1ZXMgPSBbXTtcbiAgICAgIHByZXZpZXdEYXRhLm11bHRpcGxlID0gJCgnW25hbWU9XCJtdWx0aXBsZVwiXScsIGZpZWxkKS5pcygnOmNoZWNrZWQnKTtcblxuICAgICAgJCgnLnNvcnRhYmxlLW9wdGlvbnMgbGknLCBmaWVsZCkuZWFjaChmdW5jdGlvbihpLCAkb3B0aW9uKSB7XG4gICAgICAgIGxldCBvcHRpb24gPSB7fTtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gJCgnLm9wdGlvbi1zZWxlY3RlZCcsICRvcHRpb24pLmlzKCc6Y2hlY2tlZCcpO1xuICAgICAgICBvcHRpb24udmFsdWUgPSAkKCcub3B0aW9uLXZhbHVlJywgJG9wdGlvbikudmFsKCk7XG4gICAgICAgIG9wdGlvbi5sYWJlbCA9ICQoJy5vcHRpb24tbGFiZWwnLCAkb3B0aW9uKS52YWwoKTtcbiAgICAgICAgcHJldmlld0RhdGEudmFsdWVzLnB1c2gob3B0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXZpZXdEYXRhID0gdXRpbHMudHJpbU9iaihwcmV2aWV3RGF0YSk7XG5cbiAgICBwcmV2aWV3RGF0YS5jbGFzc05hbWUgPSBfdGhpcy5jbGFzc05hbWVzKGZpZWxkLCBwcmV2aWV3RGF0YSk7XG4gICAgJCgnLmZsZC1jbGFzc05hbWUnLCBmaWVsZCkudmFsKHByZXZpZXdEYXRhLmNsYXNzTmFtZSk7XG5cbiAgICAkZmllbGQuZGF0YSgnZmllbGREYXRhJywgcHJldmlld0RhdGEpO1xuICAgIHByZXZpZXcgPSB1dGlscy5nZXRUZW1wbGF0ZShwcmV2aWV3RGF0YSwgdHJ1ZSk7XG5cbiAgICBlbXB0eSgkcHJldkhvbGRlclswXSk7XG4gICAgJHByZXZIb2xkZXJbMF0uYXBwZW5kQ2hpbGQocHJldmlldyk7XG4gICAgcHJldmlldy5kaXNwYXRjaEV2ZW50KGV2ZW50cy5maWVsZFJlbmRlcmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGEgY3VzdG9tIHRvb2x0aXAgZm9yIGRpc2FibGVkIGZpZWxkcy5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBmaWVsZFxuICAgKi9cbiAgZGlzYWJsZWRUVChzdGFnZSkge1xuICAgIGNvbnN0IG1vdmUgPSAoZSwgZWxlbSkgPT4ge1xuICAgICAgY29uc3QgZmllbGRPZmZzZXQgPSBlbGVtLmZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgeCA9IGUuY2xpZW50WCAtIGZpZWxkT2Zmc2V0LmxlZnQgLSAyMTtcbiAgICAgIGNvbnN0IHkgPSBlLmNsaWVudFkgLSBmaWVsZE9mZnNldC50b3AgLSBlbGVtLnR0Lm9mZnNldEhlaWdodCAtIDEyO1xuICAgICAgZWxlbS50dC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7eH1weCwgJHt5fXB4KWA7XG4gICAgfTtcblxuICAgIHN0YWdlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXNhYmxlZC1maWVsZCcpLmZvckVhY2goXG4gICAgICBmaWVsZCA9PiB7XG4gICAgICAgIGxldCB0aXRsZSA9IG9wdHMubWVzc2FnZXMuZmllbGROb25FZGl0YWJsZTtcblxuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICBsZXQgdHQgPSB1dGlscy5tYXJrdXAoJ3AnLCB0aXRsZSwge2NsYXNzTmFtZTogJ2ZybWItdHQnfSk7XG4gICAgICAgICAgZmllbGQuYXBwZW5kQ2hpbGQodHQpO1xuICAgICAgICAgIGZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGUgPT4gbW92ZShlLCB7dHQsIGZpZWxkfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGNsYXNzTmFtZXMgZm9yIGZpZWxkXG4gICAqIEBwYXJhbSAge09iamVjdH0gZmllbGRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBwcmV2aWV3RGF0YVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGNsYXNzTmFtZXNcbiAgICovXG4gIGNsYXNzTmFtZXMoZmllbGQsIHByZXZpZXdEYXRhKSB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IGZpZWxkLnF1ZXJ5U2VsZWN0b3IoJy5mbGQtY2xhc3NOYW1lJyk7XG4gICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGk7XG4gICAgbGV0IHR5cGUgPSBwcmV2aWV3RGF0YS50eXBlO1xuICAgIGxldCBzdHlsZSA9IHByZXZpZXdEYXRhLnN0eWxlO1xuICAgIGxldCBjbGFzc2VzID0gY2xhc3NOYW1lLnZhbHVlLnNwbGl0KCcgJyk7XG4gICAgbGV0IHR5cGVzID0ge1xuICAgICAgYnV0dG9uOiAnYnRuJyxcbiAgICAgIHN1Ym1pdDogJ2J0bidcbiAgICB9O1xuXG4gICAgbGV0IHByaW1hcnlUeXBlID0gdHlwZXNbdHlwZV07XG5cbiAgICBpZiAocHJpbWFyeVR5cGUpIHtcbiAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCByZSA9IG5ldyBSZWdFeHAoYCg/Ol58XFxzKSR7cHJpbWFyeVR5cGV9LSguKj8pKD86XFxzfCQpK2AsICdnJyk7XG4gICAgICAgICAgbGV0IG1hdGNoID0gY2xhc3Nlc1tpXS5tYXRjaChyZSk7XG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2xhc3Nlcy5wdXNoKHByaW1hcnlUeXBlICsgJy0nICsgc3R5bGUpO1xuICAgICAgfVxuICAgICAgY2xhc3Nlcy5wdXNoKHByaW1hcnlUeXBlKTtcbiAgICB9XG5cbiAgICAvLyByZXZlcnNlIHRoZSBhcnJheSB0byBwdXQgY3VzdG9tIGNsYXNzZXMgYXQgZW5kLFxuICAgIC8vIHJlbW92ZSBhbnkgZHVwbGljYXRlcywgY29udmVydCB0byBzdHJpbmcsIHJlbW92ZSB3aGl0ZXNwYWNlXG4gICAgcmV0dXJuIHV0aWxzLnVuaXF1ZShjbGFzc2VzKS5qb2luKCcgJykudHJpbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyBhbmQgb3BlbiBkaWFsb2dcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBvdmVybGF5IEV4aXN0aW5nIG92ZXJsYXkgaWYgdGhlcmUgaXMgb25lXG4gICAqIEBwYXJhbSAge09iamVjdH0gZGlhbG9nICBFeGlzdGluZyBkaWFsb2dcbiAgICovXG4gIGNsb3NlQ29uZmlybShvdmVybGF5LCBkaWFsb2cpIHtcbiAgICBpZiAoIW92ZXJsYXkpIHtcbiAgICAgIG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmb3JtLWJ1aWxkZXItb3ZlcmxheScpWzBdO1xuICAgIH1cbiAgICBpZiAoIWRpYWxvZykge1xuICAgICAgZGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9ybS1idWlsZGVyLWRpYWxvZycpWzBdO1xuICAgIH1cbiAgICBvdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKTtcbiAgICBkaWFsb2cucmVtb3ZlKCk7XG4gICAgb3ZlcmxheS5yZW1vdmUoKTtcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5tb2RhbENsb3NlZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGF5b3V0IGRhdGEgYmFzZWQgb24gY29udHJvbFBvc2l0aW9uIG9wdGlvblxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGNvbnRyb2xQb3NpdGlvbiAnbGVmdCcgb3IgJ3JpZ2h0J1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IGxheW91dCBvYmplY3RcbiAgICovXG4gIGVkaXRvckxheW91dChjb250cm9sUG9zaXRpb24pIHtcbiAgICBsZXQgbGF5b3V0TWFwID0ge1xuICAgICAgbGVmdDoge1xuICAgICAgICBzdGFnZTogJ3B1bGwtcmlnaHQnLFxuICAgICAgICBjb250cm9sczogJ3B1bGwtbGVmdCdcbiAgICAgIH0sXG4gICAgICByaWdodDoge1xuICAgICAgICBzdGFnZTogJ3B1bGwtbGVmdCcsXG4gICAgICAgIGNvbnRyb2xzOiAncHVsbC1yaWdodCdcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGxheW91dE1hcFtjb250cm9sUG9zaXRpb25dID8gbGF5b3V0TWFwW2NvbnRyb2xQb3NpdGlvbl0gOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG92ZXJsYXkgdG8gdGhlIHBhZ2UuIFVzZWQgZm9yIG1vZGFscy5cbiAgICogQHJldHVybiB7T2JqZWN0fSBET00gT2JqZWN0XG4gICAqL1xuICBzaG93T3ZlcmxheSgpIHtcbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgbGV0IG92ZXJsYXkgPSB1dGlscy5tYXJrdXAoJ2RpdicsIG51bGwsIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Zvcm0tYnVpbGRlci1vdmVybGF5J1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XG4gICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7XG5cbiAgICBvdmVybGF5Lm9uY2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLmNsb3NlQ29uZmlybShvdmVybGF5KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG92ZXJsYXk7XG4gIH1cblxuICAvKipcbiAgICogQ3VzdG9tIGNvbmZpcm1hdGlvbiBkaWFsb2dcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgbWVzc2FnZSAgIENvbnRlbnQgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBkaWFsb2dcbiAgICogQHBhcmFtICB7RnVuY30gIHllc0FjdGlvbiBjYWxsYmFjayB0byBmaXJlIGlmIHRoZXkgY29uZmlybVxuICAgKiBAcGFyYW0gIHtCb29sZWFufSBjb29yZHMgICAgbG9jYXRpb24gdG8gcHV0IHRoZSBkaWFsb2dcbiAgICogQHBhcmFtICB7U3RyaW5nfSAgY2xhc3NOYW1lIEN1c3RvbSBjbGFzcyB0byBiZSBhZGRlZCB0byB0aGUgZGlhbG9nXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICBSZWZlcmVuY2UgdG8gdGhlIG1vZGFsXG4gICAqL1xuICBjb25maXJtKG1lc3NhZ2UsIHllc0FjdGlvbiwgY29vcmRzID0gZmFsc2UsIGNsYXNzTmFtZSA9ICcnKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGxldCBpMThuID0gbWkxOG4uY3VycmVudDtcbiAgICBsZXQgb3ZlcmxheSA9IF90aGlzLnNob3dPdmVybGF5KCk7XG4gICAgbGV0IHllcyA9IG0oJ2J1dHRvbicsIGkxOG4ueWVzLCB7XG4gICAgICBjbGFzc05hbWU6ICd5ZXMgYnRuIGJ0bi1zdWNjZXNzIGJ0bi1zbSdcbiAgICB9KTtcbiAgICBsZXQgbm8gPSBtKCdidXR0b24nLCBpMThuLm5vLCB7XG4gICAgICBjbGFzc05hbWU6ICdubyBidG4gYnRuLWRhbmdlciBidG4tc20nXG4gICAgfSk7XG5cbiAgICBuby5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBfdGhpcy5jbG9zZUNvbmZpcm0ob3ZlcmxheSk7XG4gICAgfTtcblxuICAgIHllcy5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICB5ZXNBY3Rpb24oKTtcbiAgICAgIF90aGlzLmNsb3NlQ29uZmlybShvdmVybGF5KTtcbiAgICB9O1xuXG4gICAgbGV0IGJ0bldyYXAgPSBtKCdkaXYnLCBbbm8sIHllc10sIHtjbGFzc05hbWU6ICdidXR0b24td3JhcCd9KTtcblxuICAgIGNsYXNzTmFtZSA9ICdmb3JtLWJ1aWxkZXItZGlhbG9nICcgKyBjbGFzc05hbWU7XG5cbiAgICBsZXQgbWluaU1vZGFsID0gbSgnZGl2JywgW21lc3NhZ2UsIGJ0bldyYXBdLCB7Y2xhc3NOYW1lfSk7XG4gICAgaWYgKCFjb29yZHMpIHtcbiAgICAgIGNvbnN0IGRFID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgY29vcmRzID0ge1xuICAgICAgICBwYWdlWDogTWF0aC5tYXgoZEUuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApIC8gMixcbiAgICAgICAgcGFnZVk6IE1hdGgubWF4KGRFLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApIC8gMlxuICAgICAgfTtcbiAgICAgIG1pbmlNb2RhbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pbmlNb2RhbC5jbGFzc0xpc3QuYWRkKCdwb3NpdGlvbmVkJyk7XG4gICAgfVxuXG4gICAgbWluaU1vZGFsLnN0eWxlLmxlZnQgPSBjb29yZHMucGFnZVggKyAncHgnO1xuICAgIG1pbmlNb2RhbC5zdHlsZS50b3AgPSBjb29yZHMucGFnZVkgKyAncHgnO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtaW5pTW9kYWwpO1xuXG4gICAgeWVzLmZvY3VzKCk7XG4gICAgcmV0dXJuIG1pbmlNb2RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3B1cCBkaWFsb2cgdGhlIGRvZXMgbm90IHJlcXVpcmUgY29uZmlybWF0aW9uLlxuICAgKiBAcGFyYW0gIHtTdHJpbmd8RE9NfEFycmF5fSAgY29udGVudFxuICAgKiBAcGFyYW0gIHtCb29sZWFufSBjb29yZHMgICAgZmFsc2UgaWYgbm8gY29vcmRzIGFyZSBwcm92aWRlZC4gV2l0aG91dCBjb29yZGluYXRlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBvcHVwIHdpbGwgYXBwZWFyIGNlbnRlciBzY3JlZW4uXG4gICAqIEBwYXJhbSAge1N0cmluZ30gIGNsYXNzTmFtZSBjbGFzc25hbWUgdG8gYmUgYWRkZWQgdG8gdGhlIGRpYWxvZ1xuICAgKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgICAgZG9tXG4gICAqL1xuICBkaWFsb2coY29udGVudCwgY29vcmRzID0gZmFsc2UsIGNsYXNzTmFtZSA9ICcnKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGxldCBjbGllbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICBsZXQgY2xpZW50SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBfdGhpcy5zaG93T3ZlcmxheSgpO1xuXG4gICAgY2xhc3NOYW1lID0gJ2Zvcm0tYnVpbGRlci1kaWFsb2cgJyArIGNsYXNzTmFtZTtcblxuICAgIGxldCBtaW5pTW9kYWwgPSB1dGlscy5tYXJrdXAoJ2RpdicsIGNvbnRlbnQsIHtjbGFzc05hbWU6IGNsYXNzTmFtZX0pO1xuICAgIGlmICghY29vcmRzKSB7XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHBhZ2VYOiBNYXRoLm1heChjbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCkgLyAyLFxuICAgICAgICBwYWdlWTogTWF0aC5tYXgoY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCkgLyAyXG4gICAgICB9O1xuICAgICAgbWluaU1vZGFsLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICB9IGVsc2Uge1xuICAgICAgbWluaU1vZGFsLmNsYXNzTGlzdC5hZGQoJ3Bvc2l0aW9uZWQnKTtcbiAgICB9XG5cbiAgICBtaW5pTW9kYWwuc3R5bGUubGVmdCA9IGNvb3Jkcy5wYWdlWCArICdweCc7XG4gICAgbWluaU1vZGFsLnN0eWxlLnRvcCA9IGNvb3Jkcy5wYWdlWSArICdweCc7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1pbmlNb2RhbCk7XG5cbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5tb2RhbE9wZW5lZCk7XG5cbiAgICBpZiAoY2xhc3NOYW1lLmluZGV4T2YoJ2RhdGEtZGlhbG9nJykgIT09IC0xKSB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy52aWV3RGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbmlNb2RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtIGFsbCBmaWVsZHMgd2lsbCBiZSByZW1vdmVkIHRoZW4gcmVtb3ZlIHRoZW1cbiAgICogQHBhcmFtICB7T2JqZWN0fSBlIGNsaWNrIGV2ZW50IG9iamVjdFxuICAgKi9cbiAgY29uZmlybVJlbW92ZUFsbChlKSB7XG4gICAgbGV0IF90aGlzID0gdGhpcztcbiAgICBsZXQgZm9ybUlEID0gZS50YXJnZXQuaWQubWF0Y2goL2ZybWItXFxkezEzfS8pWzBdO1xuICAgIGxldCBzdGFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1JRCk7XG4gICAgbGV0IGkxOG4gPSBtaTE4bi5jdXJyZW50O1xuICAgIGxldCBmaWVsZHMgPSAkKCdsaS5mb3JtLWZpZWxkJywgc3RhZ2UpO1xuICAgIGxldCBidXR0b25Qb3NpdGlvbiA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgbGV0IGNvb3JkcyA9IHtcbiAgICAgIHBhZ2VYOiBidXR0b25Qb3NpdGlvbi5sZWZ0ICsgKGJ1dHRvblBvc2l0aW9uLndpZHRoIC8gMiksXG4gICAgICBwYWdlWTogKGJ1dHRvblBvc2l0aW9uLnRvcCAtIGJvZHlSZWN0LnRvcCkgLSAxMlxuICAgIH07XG5cbiAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xuICAgICAgX3RoaXMuY29uZmlybShpMThuLmNsZWFyQWxsTWVzc2FnZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLnJlbW92ZUFsbEZpZWxkcy5jYWxsKF90aGlzLCBzdGFnZSk7XG4gICAgICAgIGNvbmZpZy5vcHRzLm5vdGlmeS5zdWNjZXNzKGkxOG4uYWxsRmllbGRzUmVtb3ZlZCk7XG4gICAgICAgIGNvbmZpZy5vcHRzLm9uQ2xlYXJBbGwoKTtcbiAgICAgIH0sIGNvb3Jkcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF90aGlzLmRpYWxvZyhpMThuLm5vRmllbGRzVG9DbGVhciwgY29vcmRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZmllbGRzIGZyb20gdGhlIGZvcm1cbiAgICogQHBhcmFtIHtCb29sZWFufSBhbmltYXRlIHdoZXRoZXIgdG8gYW5pbWF0ZSBvciBub3RcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHJlbW92ZUFsbEZpZWxkcyhzdGFnZSwgYW5pbWF0ZSA9IHRydWUpIHtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgIGxldCBpMThuID0gbWkxOG4uY3VycmVudDtcbiAgICBsZXQgb3B0cyA9IGNvbmZpZy5vcHRzO1xuICAgIGxldCBmaWVsZHMgPSBzdGFnZS5xdWVyeVNlbGVjdG9yQWxsKCdsaS5mb3JtLWZpZWxkJyk7XG4gICAgbGV0IG1hcmtFbXB0eUFycmF5ID0gW107XG5cbiAgICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5wcmVwZW5kKSB7XG4gICAgICBtYXJrRW1wdHlBcnJheS5wdXNoKHRydWUpO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmFwcGVuZCkge1xuICAgICAgbWFya0VtcHR5QXJyYXkucHVzaCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hcmtFbXB0eUFycmF5LnNvbWUoZWxlbSA9PiBlbGVtID09PSB0cnVlKSkge1xuICAgICAgc3RhZ2UucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdlbXB0eScpO1xuICAgICAgc3RhZ2UucGFyZW50RWxlbWVudC5kYXRhc2V0LmNvbnRlbnQgPSBpMThuLmdldFN0YXJ0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKGFuaW1hdGUpIHtcbiAgICAgIHN0YWdlLmNsYXNzTGlzdC5hZGQoJ3JlbW92aW5nJyk7XG4gICAgICBsZXQgb3V0ZXJIZWlnaHQgPSAwO1xuICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4gb3V0ZXJIZWlnaHQgKz0gZmllbGQub2Zmc2V0SGVpZ2h0ICsgMyk7XG4gICAgICBmaWVsZHNbMF0uc3R5bGUubWFyZ2luVG9wID0gYCR7LW91dGVySGVpZ2h0fXB4YDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbXB0eShzdGFnZSkuY2xhc3NMaXN0LnJlbW92ZSgncmVtb3ZpbmcnKTtcbiAgICAgICAgX3RoaXMuc2F2ZShzdGFnZSk7XG4gICAgICB9LCA0MDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbXB0eShzdGFnZSk7XG4gICAgICBfdGhpcy5zYXZlKHN0YWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdXNlciByZS1vcmRlcnMgdGhlIGVsZW1lbnRzIHRoZWlyIG9yZGVyIHNob3VsZCBiZSBzYXZlZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICRjYlVMIG91ciBsaXN0IG9mIGVsZW1lbnRzXG4gICAqL1xuICBzZXRGaWVsZE9yZGVyKCRjYlVMKSB7XG4gICAgaWYgKCFjb25maWcub3B0cy5zb3J0YWJsZUNvbnRyb2xzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGZpZWxkT3JkZXIgPSB7fTtcblxuICAgICRjYlVMLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xuICAgICAgZmllbGRPcmRlcltpbmRleF0gPSAkKGVsZW1lbnQpLmRhdGEoJ3R5cGUnKTtcbiAgICB9KTtcblxuICAgIGlmICh3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdmaWVsZE9yZGVyJywgd2luZG93LkpTT04uc3RyaW5naWZ5KGZpZWxkT3JkZXIpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVvcmRlciB0aGUgY29udHJvbHMgaWYgdGhlIHVzZXIgaGFzIHByZXZpb3VzbHkgb3JkZXJlZCB0aGVtLlxuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheX0gZnJtYkZpZWxkc1xuICAgKiBAcmV0dXJuIHtBcnJheX0gb3JkZXJlZCBmaWVsZHNcbiAgICovXG4gIG9yZGVyRmllbGRzKGZybWJGaWVsZHMpIHtcbiAgICBjb25zdCBvcHRzID0gY29uZmlnLm9wdHM7XG4gICAgbGV0IGZpZWxkT3JkZXIgPSBmYWxzZTtcbiAgICBsZXQgbmV3T3JkZXJGaWVsZHMgPSBbXTtcblxuICAgIGlmICh3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgIGlmIChvcHRzLnNvcnRhYmxlQ29udHJvbHMpIHtcbiAgICAgICAgZmllbGRPcmRlciA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmaWVsZE9yZGVyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZmllbGRPcmRlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZmllbGRPcmRlcikge1xuICAgICAgbGV0IGNvbnRyb2xPcmRlciA9IG9wdHMuY29udHJvbE9yZGVyLmNvbmNhdChmcm1iRmllbGRzLm1hcChmaWVsZCA9PlxuICAgICAgICBmaWVsZC5hdHRycy50eXBlKSk7XG4gICAgICBmaWVsZE9yZGVyID0gdXRpbHMudW5pcXVlKGNvbnRyb2xPcmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkT3JkZXIgPSB3aW5kb3cuSlNPTi5wYXJzZShmaWVsZE9yZGVyKTtcbiAgICAgIGZpZWxkT3JkZXIgPSBPYmplY3Qua2V5cyhmaWVsZE9yZGVyKS5tYXAoZnVuY3Rpb24oaSkge1xuICAgICAgICByZXR1cm4gZmllbGRPcmRlcltpXTtcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgZmllbGRPcmRlci5mb3JFYWNoKChmaWVsZFR5cGUpID0+IHtcbiAgICAgIGxldCBmaWVsZCA9IGZybWJGaWVsZHMuZmlsdGVyKGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgICAgIHJldHVybiBmaWVsZC5hdHRycy50eXBlID09PSBmaWVsZFR5cGU7XG4gICAgICB9KVswXTtcbiAgICAgIG5ld09yZGVyRmllbGRzLnB1c2goZmllbGQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld09yZGVyRmllbGRzLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBmaWVsZHMgYmVpbmcgZWRpdGluZ1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IHN0YWdlXG4gICAqL1xuICBjbG9zZUFsbEVkaXQoKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGNvbnN0IGZpZWxkcyA9ICQoJz4gbGkuZWRpdGluZycsIF90aGlzLmQuc3RhZ2UpO1xuICAgIGNvbnN0IHRvZ2dsZUJ0bnMgPSAkKCcudG9nZ2xlLWZvcm0nLCBfdGhpcy5kLnN0YWdlKTtcbiAgICBjb25zdCBlZGl0UGFuZWxzID0gJCgnLmZybS1ob2xkZXInLCBmaWVsZHMpO1xuXG4gICAgdG9nZ2xlQnRucy5yZW1vdmVDbGFzcygnb3BlbicpO1xuICAgIGZpZWxkcy5yZW1vdmVDbGFzcygnZWRpdGluZycpO1xuICAgICQoJy5wcmV2LWhvbGRlcicsIGZpZWxkcykuc2hvdygpO1xuICAgIGVkaXRQYW5lbHMuaGlkZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGVkaXQgbW9kZSBmb3IgdGhlIGdpdmVuIGZpZWxkXG4gICAqIEBwYXJhbSAge1N0cmluZ30gZmllbGRJZFxuICAgKiBAcGFyYW0gIHtCb29sZWFufSBhbmltYXRlXG4gICAqL1xuICB0b2dnbGVFZGl0KGZpZWxkSWQsIGFuaW1hdGUgPSB0cnVlKSB7XG4gICAgY29uc3QgZmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaWVsZElkKTtcbiAgICBjb25zdCB0b2dnbGVCdG4gPSAkKCcudG9nZ2xlLWZvcm0nLCBmaWVsZCk7XG4gICAgY29uc3QgZWRpdFBhbmVsID0gJCgnLmZybS1ob2xkZXInLCBmaWVsZCk7XG4gICAgZmllbGQuY2xhc3NMaXN0LnRvZ2dsZSgnZWRpdGluZycpO1xuICAgIHRvZ2dsZUJ0bi50b2dnbGVDbGFzcygnb3BlbicpO1xuICAgIGlmIChhbmltYXRlKSB7XG4gICAgICAkKCcucHJldi1ob2xkZXInLCBmaWVsZCkuc2xpZGVUb2dnbGUoMjUwKTtcbiAgICAgIGVkaXRQYW5lbC5zbGlkZVRvZ2dsZSgyNTApO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKCcucHJldi1ob2xkZXInLCBmaWVsZCkudG9nZ2xlKCk7XG4gICAgICBlZGl0UGFuZWwudG9nZ2xlKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUHJldmlldygkKGZpZWxkKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udHJvbHMgZm9sbG93IHNjcm9sbCB0byB0aGUgYm90dG9tIG9mIHRoZSBlZGl0b3JcbiAgICovXG4gIHN0aWNreUNvbnRyb2xzKCkge1xuICAgIGxldCBkID0gdGhpcy5kO1xuICAgIGNvbnN0ICRjYldyYXAgPSAkKGQuY29udHJvbHMpLnBhcmVudCgpO1xuICAgIGNvbnN0ICRzdGFnZVdyYXAgPSAkKGQuc3RhZ2UpLnBhcmVudCgpO1xuICAgIGNvbnN0IGNiV2lkdGggPSAkY2JXcmFwLndpZHRoKCk7XG4gICAgY29uc3QgY2JQb3NpdGlvbiA9IGQuY29udHJvbHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKGV2dCkge1xuICAgICAgbGV0IHNjcm9sbFRvcCA9ICQoZXZ0LnRhcmdldCkuc2Nyb2xsVG9wKCk7XG4gICAgICBjb25zdCBvZmZzZXREZWZhdWx0cyA9IHtcbiAgICAgICAgdG9wOiA1LFxuICAgICAgICBib3R0b206ICdhdXRvJyxcbiAgICAgICAgcmlnaHQ6ICdhdXRvJyxcbiAgICAgICAgbGVmdDogY2JQb3NpdGlvbi5sZWZ0XG4gICAgICB9O1xuXG4gICAgICBsZXQgb2Zmc2V0ID0gT2JqZWN0LmFzc2lnbih7fSwgb2Zmc2V0RGVmYXVsdHMsIGNvbmZpZy5vcHRzLnN0aWNreUNvbnRyb2xzLm9mZnNldCk7XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgPiAkc3RhZ2VXcmFwLm9mZnNldCgpLnRvcCkge1xuICAgICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICB3aWR0aDogY2JXaWR0aFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNiU3R5bGUgPSBPYmplY3QuYXNzaWduKHN0eWxlLCBvZmZzZXQpO1xuXG4gICAgICAgIGxldCBjYk9mZnNldCA9ICRjYldyYXAub2Zmc2V0KCk7XG4gICAgICAgIGxldCBzdGFnZU9mZnNldCA9ICRzdGFnZVdyYXAub2Zmc2V0KCk7XG4gICAgICAgIGxldCBjYkJvdHRvbSA9IGNiT2Zmc2V0LnRvcCArICRjYldyYXAuaGVpZ2h0KCk7XG4gICAgICAgIGxldCBzdGFnZUJvdHRvbSA9IHN0YWdlT2Zmc2V0LnRvcCArICRzdGFnZVdyYXAuaGVpZ2h0KCk7XG5cbiAgICAgICAgaWYgKGNiQm90dG9tID4gc3RhZ2VCb3R0b20gJiYgKGNiT2Zmc2V0LnRvcCAhPT0gc3RhZ2VPZmZzZXQudG9wKSkge1xuICAgICAgICAgICRjYldyYXAuY3NzKHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgdG9wOiAnYXV0bycsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIGxlZnQ6ICdhdXRvJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNiQm90dG9tIDwgc3RhZ2VCb3R0b20gfHwgKGNiQm90dG9tID09PSBzdGFnZUJvdHRvbSAmJiBjYk9mZnNldC50b3AgPiBzY3JvbGxUb3ApKSB7XG4gICAgICAgICAgJGNiV3JhcC5jc3MoY2JTdHlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQuY29udHJvbHMucGFyZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIGRpYWxvZyB3aXRoIHRoZSBmb3JtJ3MgZGF0YVxuICAgKi9cbiAgc2hvd0RhdGEoZSkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3QgZm9ybURhdGEgPSB1dGlscy5lc2NhcGVIdG1sKGRhdGEuZm9ybURhdGEpO1xuICAgIGNvbnN0IGNvZGUgPSBtKCdjb2RlJywgZm9ybURhdGEsIHtcbiAgICAgIGNsYXNzTmFtZTogYGZvcm1EYXRhLSR7Y29uZmlnLm9wdHMuZGF0YVR5cGV9YFxuICAgIH0pO1xuXG4gICAgdGhpcy5kaWFsb2cobSgncHJlJywgY29kZSksIG51bGwsICdkYXRhLWRpYWxvZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGZpZWxkIGZyb20gdGhlIHN0YWdlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gIGZpZWxkSUQgSUQgb2YgdGhlIGZpZWxkIHRvIGJlIHJlbW92ZWRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gZmllbGRSZW1vdmVkIHJldHVybnMgdHJ1ZSBpZiBmaWVsZCBpcyByZW1vdmVkXG4gICAqL1xuICByZW1vdmVGaWVsZChmaWVsZElEKSB7XG4gICAgbGV0IGZpZWxkUmVtb3ZlZCA9IGZhbHNlO1xuICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZC5zdGFnZTtcbiAgICBjb25zdCBmaWVsZHMgPSBmb3JtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Zvcm0tZmllbGQnKTtcblxuICAgIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgICAgY29uc29sZS53YXJuKCdObyBmaWVsZHMgdG8gcmVtb3ZlJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFmaWVsZElEKSB7XG4gICAgICBsZXQgYXZhaWxhYmxlSWRzID0gW10uc2xpY2UuY2FsbChmaWVsZHMpLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmlkO1xuICAgICAgfSk7XG4gICAgICBjb25zb2xlLndhcm4oJ2ZpZWxkSUQgcmVxdWlyZWQgdG8gcmVtb3ZlIHNwZWNpZmljIGZpZWxkcy4gUmVtb3ZpbmcgbGFzdCBmaWVsZCBzaW5jZSBubyBJRCB3YXMgc3VwcGxpZWQuJyk7XG4gICAgICBjb25zb2xlLndhcm4oJ0F2YWlsYWJsZSBJRHM6ICcgKyBhdmFpbGFibGVJZHMuam9pbignLCAnKSk7XG4gICAgICBmaWVsZElEID0gZm9ybS5sYXN0Q2hpbGQuaWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaWVsZElEKTtcbiAgICBjb25zdCAkZmllbGQgPSAkKGZpZWxkKTtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZpZWxkIG5vdCBmb3VuZCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgICRmaWVsZC5zbGlkZVVwKDI1MCwgZnVuY3Rpb24oKSB7XG4gICAgICAkZmllbGQucmVtb3ZlQ2xhc3MoJ2RlbGV0aW5nJyk7XG4gICAgICAkZmllbGQucmVtb3ZlKCk7XG4gICAgICBmaWVsZFJlbW92ZWQgPSB0cnVlO1xuICAgICAgX3RoaXMuc2F2ZSgpO1xuICAgICAgaWYgKCFmb3JtLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBzdGFnZVdyYXAgPSBmb3JtLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHN0YWdlV3JhcC5jbGFzc0xpc3QuYWRkKCdlbXB0eScpO1xuICAgICAgICBzdGFnZVdyYXAuZGF0YXNldC5jb250ZW50ID0gbWkxOG4uY3VycmVudC5nZXRTdGFydGVkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudHMuZmllbGRSZW1vdmVkKTtcbiAgICByZXR1cm4gZmllbGRSZW1vdmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG1hcmt1cCBmb3IgZm9ybSBhY3Rpb24gYnV0dG9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGJ1dHRvbkRhdGFcbiAgICogQHJldHVybiB7T2JqZWN0fSBET00gZWxlbWVudCBmb3IgYWN0aW9uIGJ1dHRvblxuICAgKi9cbiAgcHJvY2Vzc0FjdGlvbkJ1dHRvbnMoYnV0dG9uRGF0YSkge1xuICAgIGxldCB7bGFiZWwsIGV2ZW50cywgLi4uYXR0cnN9ID0gYnV0dG9uRGF0YTtcbiAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICBpZiAoYXR0cnMuaWQpIHtcbiAgICAgICAgbGFiZWwgPSBtaTE4bi5jdXJyZW50W2F0dHJzLmlkXSB8fCB1dGlscy5jYXBpdGFsaXplKGF0dHJzLmlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxhYmVsID0gJyc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhYmVsID0gbWkxOG4uY3VycmVudFtsYWJlbF0gfHwgJyc7XG4gICAgfVxuXG4gICAgaWYgKCFhdHRycy5pZCkge1xuICAgICAgYXR0cnMuaWQgPSBgJHtkYXRhLmZvcm1JRH0tYWN0aW9uLSR7TWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKjEwMDApfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJzLmlkID0gYCR7ZGF0YS5mb3JtSUR9LSR7YXR0cnMuaWR9LWFjdGlvbmA7XG4gICAgfVxuXG4gICAgY29uc3QgYnV0dG9uID0gbSgnYnV0dG9uJywgbGFiZWwsIGF0dHJzKTtcblxuICAgIGlmIChldmVudHMpIHtcbiAgICAgIGZvciAobGV0IGV2ZW50IGluIGV2ZW50cykge1xuICAgICAgICBpZiAoZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBldnQgPT4gZXZlbnRzW2V2ZW50XShldnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBidXR0b247XG4gIH1cblxuICAvKipcbiAgICogQ3Jvc3MgbGluayBzdWJ0eXBlcyBhbmQgZGVmaW5lIG1hcmt1cCBjb25maWdcbiAgICogQHBhcmFtICB7QXJyYXl9IHN1YnR5cGVPcHRzXG4gICAqIEByZXR1cm4ge0FycmF5fSBzdWJ0eXBlc1xuICAgKi9cbiAgcHJvY2Vzc1N1YnR5cGVzKHN1YnR5cGVPcHRzKSB7XG4gICAgbGV0IHN1YnR5cGVzID0ge307XG4gICAgY29uc3Qgc3VidHlwZUZvcm1hdCA9IHN1YnR5cGUgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoc3VidHlwZSksXG4gICAgICAgICAgdmFsdWU6IHN1YnR5cGVcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5zdWJ0eXBlcyA9IHV0aWxzLm1lcmdlKGRlZmF1bHRTdWJ0eXBlcywgc3VidHlwZU9wdHMpO1xuXG4gICAgICBmb3IgKGxldCBzdWJ0eXBlIGluIGNvbmZpZy5zdWJ0eXBlcykge1xuICAgICAgICBpZiAoY29uZmlnLnN1YnR5cGVzLmhhc093blByb3BlcnR5KHN1YnR5cGUpKSB7XG4gICAgICAgICAgc3VidHlwZXNbc3VidHlwZV0gPSBjb25maWcuc3VidHlwZXNbc3VidHlwZV0ubWFwKHN1YnR5cGVGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdWJ0eXBlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzdGFnZSBhbmQgY29udHJvbHMgZG9tIGVsZW1lbnRzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gZm9ybUlEIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGVkaXRvclVJKGZvcm1JRCkge1xuICAgIGxldCBkID0gdGhpcy5kO1xuICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGQuc3RhZ2UgPSBtKCd1bCcsIG51bGwsIHtcbiAgICAgICAgaWQ6IGRhdGEuZm9ybUlELFxuICAgICAgICBjbGFzc05hbWU6ICdmcm1iJ1xuICAgICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgZHJhZ2dhYmxlIGZpZWxkcyBmb3IgZm9ybUJ1aWxkZXJcbiAgICBkLmNvbnRyb2xzID0gbSgndWwnLCBudWxsLCB7XG4gICAgICBpZDogYCR7ZGF0YS5mb3JtSUR9LWNvbnRyb2wtYm94YCxcbiAgICAgIGNsYXNzTmFtZTogJ2ZybWItY29udHJvbCdcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHVzZXIgb3B0aW9ucyBmb3IgYWN0aW9uQnV0dG9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7T2JqZWN0fSBwcm9jZXNzZWRPcHRpb25zXG4gICAqL1xuICBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGxldCB7ZmllbGRzID0gW10sIHRlbXBsYXRlcywgLi4ub3B0c30gPSBvcHRpb25zO1xuICAgIGxldCBhY3Rpb25CdXR0b25zID0gW3tcbiAgICAgIGlkOiAnY2xlYXInLFxuICAgICAgY2xhc3NOYW1lOiAnY2xlYXItYWxsIGJ0biBidG4tZGFuZ2VyJyxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljazogX3RoaXMuY29uZmlybVJlbW92ZUFsbC5iaW5kKF90aGlzKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGxhYmVsOiAndmlld0pTT04nLFxuICAgICAgaWQ6ICdkYXRhJyxcbiAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tZGVmYXVsdCcsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2s6IF90aGlzLnNob3dEYXRhLmJpbmQoX3RoaXMpXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgaWQ6ICdzYXZlJyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1wcmltYXJ5IHNhdmUtdGVtcGxhdGUnLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrOiBldnQgPT4ge1xuICAgICAgICAgIF90aGlzLnNhdmUoKTtcbiAgICAgICAgICBjb25maWcub3B0cy5vblNhdmUoZXZ0LCBfdGhpcy5kYXRhLmZvcm1EYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1dO1xuXG4gICAgbGV0IGRlZmF1bHRGaWVsZHMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2F1dG9jb21wbGV0ZScpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdhdXRvY29tcGxldGUnXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnYnV0dG9uJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnY2hlY2tib3hHcm91cCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdjaGVja2JveC1ncm91cCcsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnZGF0ZUZpZWxkJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2ZpbGVVcGxvYWQnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnaGVhZGVyJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ2hlYWRlcicsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnaGlkZGVuJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ2hpZGRlbicsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnbnVtYmVyJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgncGFyYWdyYXBoJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgncmFkaW9Hcm91cCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdyYWRpby1ncm91cCcsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnc2VsZWN0JyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgndGV4dCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogbWkxOG4uZ2V0KCd0ZXh0QXJlYScpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0YXJlYSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG5cbiAgICBvcHRzLmZpZWxkcyA9IGZpZWxkcy5jb25jYXQoZGVmYXVsdEZpZWxkcyk7XG4gICAgY29uZmlnLm9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB7YWN0aW9uQnV0dG9ucywgdGVtcGxhdGVzLCBmaWVsZHN9LCBvcHRzKTtcbiAgICBsZXQgdXNlclRlbXBsYXRlcyA9IE9iamVjdC5rZXlzKGNvbmZpZy5vcHRzLnRlbXBsYXRlcykubWFwKGtleSA9PiB7XG4gICAgICByZXR1cm4gW2tleSwgY29uZmlnLm9wdHMudGVtcGxhdGVzW2tleV1dO1xuICAgIH0pO1xuICAgIHV0aWxzLnRlbXBsYXRlcyA9IHV0aWxzLnRlbXBsYXRlcy5jb25jYXQodXNlclRlbXBsYXRlcyk7XG5cbiAgICByZXR1cm4gY29uZmlnLm9wdHM7XG4gIH1cblxuXG4gIC8vIGVuZCBjbGFzc1xufVxuXG4vLyBleHBvcnQgZGVmYXVsdCBIZWxwZXJzO1xuIiwiLyoqXG4gKiBQb2x5ZmlsbHMgZm9yIG9sZGVyIGJyb3dzZXJzIGFuZCBhZGRlZCBmdW5jdGlvbmFsaXR5XG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBwb2x5ZmlsbHMoKSB7XG4gIC8vIEVsZW1lbnQucmVtb3ZlKCkgcG9seWZpbGxcbiAgaWYgKCEoJ3JlbW92ZScgaW4gRWxlbWVudC5wcm90b3R5cGUpKSB7XG4gICAgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gRXZlbnQgcG9seWZpbGxcbiAgaWYgKHR5cGVvZiBFdmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHdpbmRvdy5FdmVudCA9IGZ1bmN0aW9uKGV2dCkge1xuICAgICAgICBsZXQgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgICAgZXZlbnQuaW5pdEV2ZW50KGV2dCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgfVxuXG4gIC8vIE9iamVjdC5hc3NpZ24gcG9seWZpbGxcbiAgaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9ICdmdW5jdGlvbicpIHtcbiAgICBPYmplY3QuYXNzaWduID0gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAndXNlIHN0cmljdCc7XG4gICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldCA9IE9iamVjdCh0YXJnZXQpO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbGV0IHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAobGV0IGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gIH1cblxuXG4gIC8vIFJlZmVyZW5jZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS40LjQuMThcbiAgaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkge1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgIGxldCBULCBrO1xuICAgICAgaWYgKHRoaXMgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBPID0gT2JqZWN0KHRoaXMpO1xuICAgICAgbGV0IGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIFQgPSBhcmd1bWVudHNbMV07XG4gICAgICB9XG4gICAgICBrID0gMDtcbiAgICAgIHdoaWxlIChrIDwgbGVuKSB7XG4gICAgICAgIGxldCBrVmFsdWU7XG4gICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgIGNhbGxiYWNrLmNhbGwoVCwga1ZhbHVlLCBrLCBPKTtcbiAgICAgICAgfVxuICAgICAgICBrKys7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwb2x5ZmlsbHMoKTtcbiIsImltcG9ydCB7ZGVmYXVsdFN1YnR5cGVzLCBmaWx0ZXJ9IGZyb20gJy4vZG9tJztcblxuLyoqXG4gKiBDcm9zcyBmaWxlIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIGFycmF5cyxcbiAqIHNvcnRpbmcgYW5kIG90aGVyIGZ1biBzdHVmZlxuICogQHJldHVybiB7T2JqZWN0fSB1dGlsc1xuICovXG4vLyBmdW5jdGlvbiB1dGlscygpIHtcbiAgY29uc3QgdXRpbHMgPSB7fTtcbiAgd2luZG93LmZiTG9hZGVkID0ge1xuICAgIGpzOiBbXSxcbiAgICBjc3M6IFtdXG4gIH07XG4gIHdpbmRvdy5mYkVkaXRvcnMgPSB7XG4gICAgcXVpbGw6IHt9LFxuICAgIHRpbnltY2U6IHt9XG4gIH07XG5cbiAgLy8gY2xlYW5lciBzeW50YXggZm9yIHRlc3RpbmcgaW5kZXhPZiBlbGVtZW50XG4gIHV0aWxzLmluQXJyYXkgPSBmdW5jdGlvbihuZWVkbGUsIGhheXN0YWNrKSB7XG4gICAgcmV0dXJuIGhheXN0YWNrLmluZGV4T2YobmVlZGxlKSAhPT0gLTE7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhdHRycyB7YXR0ck5hbWU6IGF0dHJWYWx1ZX1cbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICBPYmplY3QgdHJpbW1lZCBvZiBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICovXG4gIHV0aWxzLnRyaW1PYmogPSBmdW5jdGlvbihhdHRycykge1xuICAgIGxldCB4bWxSZW1vdmUgPSBbXG4gICAgICBudWxsLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgJycsXG4gICAgICBmYWxzZSxcbiAgICAgICdmYWxzZSdcbiAgICBdO1xuICAgIGZvciAobGV0IGF0dHIgaW4gYXR0cnMpIHtcbiAgICAgIGlmICh1dGlscy5pbkFycmF5KGF0dHJzW2F0dHJdLCB4bWxSZW1vdmUpKSB7XG4gICAgICAgIGRlbGV0ZSBhdHRyc1thdHRyXTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhdHRyc1thdHRyXSkpIHtcbiAgICAgICAgaWYgKCFhdHRyc1thdHRyXS5sZW5ndGgpIHtcbiAgICAgICAgICBkZWxldGUgYXR0cnNbYXR0cl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRlc3QgaWYgYXR0cmlidXRlIGlzIGEgdmFsaWQgSFRNTCBhdHRyaWJ1dGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhdHRyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICB1dGlscy52YWxpZEF0dHIgPSBmdW5jdGlvbihhdHRyKSB7XG4gICAgbGV0IGludmFsaWQgPSBbXG4gICAgICAndmFsdWVzJyxcbiAgICAgICdlbmFibGVPdGhlcicsXG4gICAgICAnb3RoZXInLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgIC8vICdzdHlsZScsXG4gICAgICAnc3VidHlwZSdcbiAgICBdO1xuICAgIHJldHVybiAhdXRpbHMuaW5BcnJheShhdHRyLCBpbnZhbGlkKTtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydCBhbiBhdHRycyBvYmplY3QgaW50byBhIHN0cmluZ1xuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGF0dHJzIG9iamVjdCBvZiBhdHRyaWJ1dGVzIGZvciBtYXJrdXBcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdXRpbHMuYXR0clN0cmluZyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgbGV0IGF0dHJpYnV0ZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGF0dHIgaW4gYXR0cnMpIHtcbiAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShhdHRyKSAmJiB1dGlscy52YWxpZEF0dHIoYXR0cikpIHtcbiAgICAgICAgYXR0ciA9IHV0aWxzLnNhZmVBdHRyKGF0dHIsIGF0dHJzW2F0dHJdKTtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKGF0dHIubmFtZSArIGF0dHIudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXR0cmlidXRlcy5qb2luKCcgJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYXR0cmlidXRlcyB0byBtYXJrdXAgc2FmZSBzdHJpbmdzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbmFtZSAgYXR0cmlidXRlIG5hbWVcbiAgICogQHBhcmFtICB7U3RyaW5nfSB2YWx1ZSBhdHRyaWJ1dGUgdmFsdWVcbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICB7YXR0ck5hbWU6IGF0dHJWYWx1ZX1cbiAgICovXG4gIHV0aWxzLnNhZmVBdHRyID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gdXRpbHMuc2FmZUF0dHJOYW1lKG5hbWUpO1xuICAgIGxldCB2YWxTdHJpbmc7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWxTdHJpbmcgPSB1dGlscy5lc2NhcGVBdHRyKHZhbHVlLmpvaW4oJyAnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHZhbFN0cmluZyA9IHV0aWxzLmVzY2FwZUF0dHIodmFsdWUucmVwbGFjZSgnLCcsICcgJykudHJpbSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YWx1ZSA9IHZhbHVlID8gYD1cIiR7dmFsU3RyaW5nfVwiYCA6ICcnO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWVcbiAgICB9O1xuICB9O1xuXG4gIHV0aWxzLnNhZmVBdHRyTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBsZXQgc2FmZUF0dHIgPSB7XG4gICAgICBjbGFzc05hbWU6ICdjbGFzcydcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNhZmVBdHRyW25hbWVdIHx8IHV0aWxzLmh5cGhlbkNhc2UobmFtZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgc3RyaW5ncyBpbnRvIGxvd2VyY2FzZS1oeXBoZW5cbiAgICpcbiAgICogQHBhcmFtICB7U3RyaW5nfSBzdHJcbiAgICogQHJldHVybiB7U3RyaW5nfVxuICAgKi9cbiAgdXRpbHMuaHlwaGVuQ2FzZSA9IChzdHIpID0+IHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvW15cXHdcXHNcXC1dL2dpLCAnJyk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLyhbQS1aXSkvZywgZnVuY3Rpb24oJDEpIHtcbiAgICAgIHJldHVybiAnLScgKyAkMS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHMvZywgJy0nKS5yZXBsYWNlKC9eLSsvZywgJycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBjb252ZXJ0IGEgaHlwaGVuYXRlZCBzdHJpbmcgdG8gY2FtZWxDYXNlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICovXG4gIHV0aWxzLmNhbWVsQ2FzZSA9IHN0ciA9PiBzdHIucmVwbGFjZSgvLShbYS16XSkvZywgKG0sIHcpID0+XG4gICAgdy50b1VwcGVyQ2FzZSgpKTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGNvbnRlbnQgdHlwZVxuICAgKiBAcGFyYW0gIHtOb2RlIHwgU3RyaW5nIHwgQXJyYXkgfCBPYmplY3R9IGNvbnRlbnRcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSBmb3IgbWFwcGluZ1xuICAgKi9cbiAgdXRpbHMuY29udGVudFR5cGUgPSBjb250ZW50ID0+IHtcbiAgICBsZXQgdHlwZSA9IHR5cGVvZiBjb250ZW50O1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgTm9kZSB8fCBjb250ZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHR5cGUgPSAnbm9kZSc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKSB7XG4gICAgICB0eXBlID0gJ2FycmF5JztcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfTtcblxuICAvKipcbiAgICogQmluZCBldmVudHMgdG8gYW4gZWxlbWVudFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGVsZW1lbnQgRE9NIGVsZW1lbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBldmVudHMgIG9iamVjdCBmdWxsIG9mIGV2ZW50cyBlZy4ge2NsaWNrOiBldnQgPT4gY2FsbGJhY2t9XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICB1dGlscy5iaW5kRXZlbnRzID0gKGVsZW1lbnQsIGV2ZW50cykgPT4ge1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIGZvciAobGV0IGV2ZW50IGluIGV2ZW50cykge1xuICAgICAgICBpZiAoZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZXZ0ID0+IGV2ZW50c1tldmVudF0oZXZ0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgbmFtZSBhdHRyaWJ1dGVcbiAqIEBwYXJhbSAge09iamVjdH0gZmllbGRcbiAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgbmFtZVxuICovXG4gIHV0aWxzLm5hbWVBdHRyID0gZnVuY3Rpb24oZmllbGQpIHtcbiAgICBsZXQgZXBvY2ggPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBsZXQgcHJlZml4ID0gZmllbGQudHlwZSB8fCB1dGlscy5oeXBoZW5DYXNlKGZpZWxkLmxhYmVsKTtcbiAgICByZXR1cm4gcHJlZml4ICsgJy0nICsgZXBvY2g7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG1hcmt1cCB3cmFwcGVyIHdoZXJlIG5lZWRlZFxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgICB0YWdcbiAgICogQHBhcmFtICB7U3RyaW5nfEFycmF5fE9iamVjdH0gY29udGVudCB3ZSB3cmFwIHRoaXNcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgICAgICAgYXR0cnNcbiAgICogQHJldHVybiB7T2JqZWN0fSBET00gRWxlbWVudFxuICAgKi9cbiAgdXRpbHMubWFya3VwID0gZnVuY3Rpb24odGFnLCBjb250ZW50ID0gJycsIGF0dHJpYnV0ZXMgPSB7fSkge1xuICAgIGxldCBjb250ZW50VHlwZSA9IHV0aWxzLmNvbnRlbnRUeXBlKGNvbnRlbnQpO1xuICAgIGxldCB7ZXZlbnRzLCAuLi5hdHRyc30gPSBhdHRyaWJ1dGVzO1xuICAgIGNvbnN0IGZpZWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuXG4gICAgY29uc3QgYXBwZW5kQ29udGVudCA9IHtcbiAgICAgIHN0cmluZzogKGNvbnRlbnQpID0+IHtcbiAgICAgICAgZmllbGQuaW5uZXJIVE1MICs9IGNvbnRlbnQ7XG4gICAgICB9LFxuICAgICAgb2JqZWN0OiAoY29uZmlnKSA9PiB7XG4gICAgICAgIGxldCB7dGFnLCBjb250ZW50LCAuLi5kYXRhfSA9IGNvbmZpZztcbiAgICAgICAgcmV0dXJuIGZpZWxkLmFwcGVuZENoaWxkKHV0aWxzLm1hcmt1cCh0YWcsIGNvbnRlbnQsIGRhdGEpKTtcbiAgICAgIH0sXG4gICAgICBub2RlOiAoY29udGVudCkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGQuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgICB9LFxuICAgICAgYXJyYXk6IChjb250ZW50KSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnRlbnRUeXBlID0gdXRpbHMuY29udGVudFR5cGUoY29udGVudFtpXSk7XG4gICAgICAgICAgYXBwZW5kQ29udGVudFtjb250ZW50VHlwZV0oY29udGVudFtpXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbjogY29udGVudCA9PiB7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50KCk7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gdXRpbHMuY29udGVudFR5cGUoY29udGVudCk7XG4gICAgICAgIGFwcGVuZENvbnRlbnRbY29udGVudFR5cGVdKGNvbnRlbnQpO1xuICAgICAgfSxcbiAgICAgIHVuZGVmaW5lZDogKCkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKHRhZywgY29udGVudCwgYXR0cmlidXRlcyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBmb3IgKGxldCBhdHRyIGluIGF0dHJzKSB7XG4gICAgICBpZiAoYXR0cnMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgbGV0IG5hbWUgPSB1dGlscy5zYWZlQXR0ck5hbWUoYXR0cik7XG4gICAgICAgIGZpZWxkLnNldEF0dHJpYnV0ZShuYW1lLCBhdHRyc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIGFwcGVuZENvbnRlbnRbY29udGVudFR5cGVdLmNhbGwodGhpcywgY29udGVudCk7XG4gICAgfVxuXG4gICAgdXRpbHMuYmluZEV2ZW50cyhmaWVsZCwgZXZlbnRzKTtcblxuICAgIHJldHVybiBmaWVsZDtcbiAgfTtcbiAgY29uc3QgbSA9IHV0aWxzLm1hcmt1cDtcblxuICAvKipcbiAgICogQ29udmVydCBodG1sIGVsZW1lbnQgYXR0cmlidXRlcyB0byBrZXkvdmFsdWUgb2JqZWN0XG4gICAqIEBwYXJhbSAge09iamVjdH0gZWxlbSBET00gZWxlbWVudFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGV4OiB7YXR0ck5hbWU6IGF0dHJWYWx1ZX1cbiAgICovXG4gIHV0aWxzLnBhcnNlQXR0cnMgPSBmdW5jdGlvbihlbGVtKSB7XG4gICAgbGV0IGF0dHJzID0gZWxlbS5hdHRyaWJ1dGVzO1xuICAgIGxldCBkYXRhID0ge307XG4gICAgdXRpbHMuZm9yRWFjaChhdHRycywgYXR0ciA9PiB7XG4gICAgICBsZXQgYXR0clZhbCA9IGF0dHJzW2F0dHJdLnZhbHVlO1xuICAgICAgaWYgKGF0dHJWYWwubWF0Y2goL2ZhbHNlfHRydWUvZykpIHtcbiAgICAgICAgYXR0clZhbCA9IChhdHRyVmFsID09PSAndHJ1ZScpO1xuICAgICAgfSBlbHNlIGlmIChhdHRyVmFsLm1hdGNoKC91bmRlZmluZWQvZykpIHtcbiAgICAgICAgYXR0clZhbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJWYWwpIHtcbiAgICAgICAgZGF0YVthdHRyc1thdHRyXS5uYW1lXSA9IGF0dHJWYWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydCBmaWVsZCBvcHRpb25zIHRvIG9wdGlvbkRhdGFcbiAgICogQHBhcmFtICB7Tm9kZUxpc3R9IG9wdGlvbnMgIERPTSBlbGVtZW50c1xuICAgKiBAcmV0dXJuIHtBcnJheX0gb3B0aW9uRGF0YSBhcnJheVxuICAgKi9cbiAgdXRpbHMucGFyc2VPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGxldCBvcHRpb25EYXRhID0ge307XG4gICAgbGV0IGRhdGEgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9uRGF0YSA9IHV0aWxzLnBhcnNlQXR0cnMob3B0aW9uc1tpXSk7XG4gICAgICBvcHRpb25EYXRhLmxhYmVsID0gb3B0aW9uc1tpXS50ZXh0Q29udGVudDtcbiAgICAgIGRhdGEucHVzaChvcHRpb25EYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgWE1MIGZvcm1EYXRhXG4gICAqIEBwYXJhbSAge1N0cmluZ30geG1sU3RyaW5nXG4gICAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICAgIGZvcm1EYXRhIGFycmF5XG4gICAqL1xuICB1dGlscy5wYXJzZVhNTCA9IGZ1bmN0aW9uKHhtbFN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG4gICAgbGV0IHhtbCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeG1sU3RyaW5nLCAndGV4dC94bWwnKTtcbiAgICBsZXQgZm9ybURhdGEgPSBbXTtcblxuICAgIGlmICh4bWwpIHtcbiAgICAgIGxldCBmaWVsZHMgPSB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZpZWxkJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZmllbGREYXRhID0gdXRpbHMucGFyc2VBdHRycyhmaWVsZHNbaV0pO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZmllbGRzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvcHRpb24nKTtcblxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIGZpZWxkRGF0YS52YWx1ZXMgPSB1dGlscy5wYXJzZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtRGF0YS5wdXNoKGZpZWxkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBlc2NhcGVkIEhUTUwgaW50byB1c2FibGUgSFRNTFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGh0bWwgZXNjYXBlZCBIVE1MXG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgICBwYXJzZWQgSFRNTFxuICAgKi9cbiAgdXRpbHMucGFyc2VkSHRtbCA9IGZ1bmN0aW9uKGh0bWwpIHtcbiAgICBsZXQgZXNjYXBlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgZXNjYXBlRWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiBlc2NhcGVFbGVtZW50LnRleHRDb250ZW50O1xuICB9O1xuXG4gIC8qKlxuICAgKiBFc2NhcGUgbWFya3VwIHNvIGl0IGNhbiBiZSBkaXNwbGF5ZWQgcmF0aGVyIHRoYW4gcmVuZGVyZWRcbiAgICogQHBhcmFtICB7U3RyaW5nfSBodG1sIG1hcmt1cFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgZXNjYXBlZCBodG1sXG4gICAqL1xuICB1dGlscy5lc2NhcGVIdG1sID0gZnVuY3Rpb24oaHRtbCkge1xuICAgIGxldCBlc2NhcGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICBlc2NhcGVFbGVtZW50LnRleHRDb250ZW50ID0gaHRtbDtcbiAgICByZXR1cm4gZXNjYXBlRWxlbWVudC5pbm5lckhUTUw7XG4gIH07XG5cbiAgLy8gRXNjYXBlIGFuIGF0dHJpYnV0ZVxuICB1dGlscy5lc2NhcGVBdHRyID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgbGV0IG1hdGNoID0ge1xuICAgICAgJ1wiJzogJyZxdW90OycsXG4gICAgICAnJic6ICcmYW1wOycsXG4gICAgICAnPCc6ICcmbHQ7JyxcbiAgICAgICc+JzogJyZndDsnXG4gICAgfTtcblxuICAgIGNvbnN0IHJlcGxhY2VUYWcgPSB0YWcgPT4gbWF0Y2hbdGFnXSB8fCB0YWc7XG5cbiAgICByZXR1cm4gKHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKSA/IHN0ci5yZXBsYWNlKC9bXCImPD5dL2csIHJlcGxhY2VUYWcpIDogc3RyO1xuICB9O1xuXG4gIC8vIEVzY2FwZSBhdHRyaWJ1dGVzXG4gIHV0aWxzLmVzY2FwZUF0dHJzID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBmb3IgKGxldCBhdHRyIGluIGF0dHJzKSB7XG4gICAgICBpZiAoYXR0cnMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgYXR0cnNbYXR0cl0gPSB1dGlscy5lc2NhcGVBdHRyKGF0dHJzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG4gIH07XG5cbiAgLy8gZm9yRWFjaCB0aGF0IGNhbiBiZSB1c2VkIG9uIG5vZGVMaXN0XG4gIHV0aWxzLmZvckVhY2ggPSBmdW5jdGlvbihhcnJheSwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2suY2FsbChzY29wZSwgaSwgYXJyYXlbaV0pOyAvLyBwYXNzZXMgYmFjayBzdHVmZiB3ZSBuZWVkXG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgZHVwbGljYXRlcyBmcm9tIGFuIGFycmF5IG9mIGVsZW1lbnRzXG4gICAqIEBwYXJhbSAge0FycmF5fSBhcnJheSAgYXJyYXkgd2l0aCBwb3NzaWJsZSBkdXBsaWNhdGVzXG4gICAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgYXJyYXkgd2l0aCBvbmx5IHVuaXF1ZSB2YWx1ZXNcbiAgICovXG4gIHV0aWxzLnVuaXF1ZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcigoZWxlbSwgcG9zLCBhcnIpID0+IHtcbiAgICAgIHJldHVybiBhcnIuaW5kZXhPZihlbGVtKSA9PT0gcG9zO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgdmFsdWUgZnJvbSBhbiBhcnJheVxuICAgKiBAcGFyYW0gIHtBcnJheX0gYXJyXG4gICAqIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICAgKi9cbiAgdXRpbHMucmVtb3ZlID0gKHZhbCwgYXJyKSA9PiB7XG4gICAgbGV0IGluZGV4ID0gYXJyLmluZGV4T2YodmFsKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9O1xuXG5cbiAgdXRpbHMubWFrZUxhYmVsID0gZmllbGREYXRhID0+IHtcbiAgICBsZXQge2xhYmVsID0gJycsIGRlc2NyaXB0aW9uID0gJycsIC4uLmF0dHJzfSA9IGZpZWxkRGF0YTtcbiAgICBsZXQgbGFiZWxUZXh0ID0gdXRpbHMucGFyc2VkSHRtbChsYWJlbCk7XG4gICAgbGV0IGxhYmVsQ29udGVudHMgPSBbbGFiZWxUZXh0XTtcblxuICAgIGlmIChhdHRycy5yZXF1aXJlZCkge1xuICAgICAgbGFiZWxDb250ZW50cy5wdXNoKG0oJ3NwYW4nLCAnIConLCB7Y2xhc3NOYW1lOiAnZmItcmVxdWlyZWQnfSkpO1xuICAgIH1cblxuICAgIGlmIChhdHRycy50eXBlICE9PSAnaGlkZGVuJykge1xuICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGxhYmVsQ29udGVudHMucHVzaChtKCdzcGFuJywgJz8nLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAndG9vbHRpcC1lbGVtZW50JyxcbiAgICAgICAgICB0b29sdGlwOiBkZXNjcmlwdGlvblxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxhYmVsQXR0cnMgPSB7XG4gICAgICBjbGFzc05hbWU6IGBmYi0ke2F0dHJzLnR5cGV9LWxhYmVsYFxuICAgIH07XG5cbiAgICBpZiAoYXR0cnMuaWQpIHtcbiAgICAgIGxhYmVsQXR0cnMuZm9yID0gYXR0cnMuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG0oJ2xhYmVsJywgbGFiZWxDb250ZW50cywgbGFiZWxBdHRycyk7XG4gIH07XG5cbiAgdXRpbHMudGVtcGxhdGVNYXAgPSB0eXBlID0+IHtcbiAgICBsZXQgdGVtcGxhdGU7XG4gICAgbGV0IHRlbXBsYXRlcyA9IHV0aWxzLnRlbXBsYXRlcztcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGVtcGxhdGVzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgIGlmKHV0aWxzLmluQXJyYXkodHlwZSwga2V5KSkge1xuICAgICAgICAgIHRlbXBsYXRlID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0ga2V5KSB7XG4gICAgICAgIHRlbXBsYXRlID0gdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICB1dGlscy5hdXRvY29tcGxldGVUZW1wbGF0ZSA9IGZpZWxkRGF0YSA9PiB7XG4gICAgbGV0IHt2YWx1ZXMsIHR5cGUsIC4uLmRhdGF9ID0gZmllbGREYXRhO1xuICAgIGNvbnN0IGtleWJvYXJkTmF2ID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBlLnRhcmdldC5uZXh0U2libGluZy5uZXh0U2libGluZztcbiAgICAgIGxldCBhY3RpdmVPcHRpb24gPSBsaXN0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FjdGl2ZS1vcHRpb24nKVswXTtcbiAgICAgIGNvbnN0IGtleUNvZGVNYXBWYWxzID0gW1xuICAgICAgICAvLyB1cFxuICAgICAgICBbMzgsICgpID0+IHtcbiAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uLnByZXZpb3VzU2libGluZykge1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlLW9wdGlvbicpO1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24gPSBhY3RpdmVPcHRpb24ucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlLW9wdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfV0sXG4gICAgICAgIC8vIGRvd25cbiAgICAgICAgWzQwLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbi5uZXh0U2libGluZykge1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlLW9wdGlvbicpO1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24gPSBhY3RpdmVPcHRpb24ubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgIGFjdGl2ZU9wdGlvbi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUtb3B0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbiA9IGxpc3QuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUtb3B0aW9uJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XSxcbiAgICAgICAgWzEzLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSBhY3RpdmVPcHRpb24uaW5uZXJIVE1MO1xuICAgICAgICAgICAgaWYgKGxpc3Quc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgIGxpc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsaXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XVxuICAgICAgXTtcbiAgICAgIGxldCBrZXlDb2RlTWFwID0gbmV3IE1hcChrZXlDb2RlTWFwVmFscyk7XG5cbiAgICAgIGxldCBkaXJlY3Rpb24gPSBrZXlDb2RlTWFwLmdldChlLmtleUNvZGUpO1xuICAgICAgaWYoIWRpcmVjdGlvbikge1xuICAgICAgICBkaXJlY3Rpb24gPSAoKSA9PiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpcmVjdGlvbigpO1xuICAgIH07XG4gICAgY29uc3QgZmF1eEV2ZW50cyA9IHtcbiAgICAgIGZvY3VzOiBldnQgPT4ge1xuICAgICAgICBsZXQgbGlzdCA9IGV2dC50YXJnZXQubmV4dFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICAgIGV2dC50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWJvYXJkTmF2KTtcbiAgICAgICAgbGlzdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgbGlzdC5zdHlsZS53aWR0aCA9IGxpc3QucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XG4gICAgICB9LFxuICAgICAgYmx1cjogZXZ0ID0+IHtcbiAgICAgICAgZXZ0LnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5Ym9hcmROYXYpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBldnQudGFyZ2V0Lm5leHRTaWJsaW5nLm5leHRTaWJsaW5nLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgICB9LFxuICAgICAgaW5wdXQ6IChldnQpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IGV2dC50YXJnZXQubmV4dFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICAgIGZpbHRlcihsaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJyksIGV2dC50YXJnZXQudmFsdWUpO1xuICAgICAgICBpZiAoIWV2dC50YXJnZXQudmFsdWUpIHtcbiAgICAgICAgICBsaXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlzdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgbGV0IGZhdXhBdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEsXG4gICAgICB7XG4gICAgICAgIGlkOiBgJHtkYXRhLmlkfS1pbnB1dGAsXG4gICAgICAgIGV2ZW50czogZmF1eEV2ZW50c1xuICAgICAgfSk7XG4gICAgbGV0IGhpZGRlbkF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSwge3R5cGU6ICdoaWRkZW4nfSk7XG4gICAgZGVsZXRlIGZhdXhBdHRycy5uYW1lO1xuICAgIGNvbnN0IGZpZWxkID0gW1xuICAgICAgbSgnaW5wdXQnLCBudWxsLCBmYXV4QXR0cnMpLFxuICAgICAgbSgnaW5wdXQnLCBudWxsLCBoaWRkZW5BdHRycylcbiAgICBdO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHZhbHVlcy5tYXAob3B0aW9uRGF0YSA9PiB7XG4gICAgICBsZXQgbGFiZWwgPSBvcHRpb25EYXRhLmxhYmVsO1xuICAgICAgbGV0IGNvbmZpZyA9IHtcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2s6IGV2dCA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gZXZ0LnRhcmdldC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBsaXN0LnByZXZpb3VzU2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IG9wdGlvbkRhdGEubGFiZWw7XG4gICAgICAgICAgICBmaWVsZC5wcmV2aW91c1NpYmxpbmcudmFsdWUgPSBvcHRpb25EYXRhLnZhbHVlO1xuICAgICAgICAgICAgbGlzdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IG9wdGlvbkRhdGEudmFsdWVcbiAgICAgIH07XG4gICAgICByZXR1cm4gbSgnbGknLCBsYWJlbCwgY29uZmlnKTtcbiAgICB9KTtcblxuICAgIGZpZWxkLnB1c2gobSgndWwnLCBvcHRpb25zLFxuICAgICAge2lkOiBgJHtkYXRhLmlkfS1saXN0YCwgY2xhc3NOYW1lOiBgZmItJHt0eXBlfS1saXN0YH0pKTtcblxuICAgIGNvbnN0IG9uUmVuZGVyID0gKGV2dCkgPT4ge1xuXG4gICAgfTtcblxuICAgIHJldHVybiB7ZmllbGQsIG9uUmVuZGVyfTtcbiAgfTtcblxuICAvKipcbiAgICogR2VuZXJhdGUgRE9NIGVsZW1lbnRzIGZvciBzZWxlY3QsIGNoZWNrYm94LWdyb3VwIGFuZCByYWRpby1ncm91cC5cbiAgICogQHBhcmFtICB7T2JqZWN0fSBmaWVsZERhdGFcbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgICAgRE9NIGVsZW1lbnRzXG4gICAqL1xuICB1dGlscy5zZWxlY3RUZW1wbGF0ZSA9IChmaWVsZERhdGEsIGlzUHJldmlldykgPT4ge1xuICAgIGxldCBvcHRpb25zID0gW107XG4gICAgbGV0IHt2YWx1ZXMsIHR5cGUsIGlubGluZSwgb3RoZXIsIHRvZ2dsZSwgLi4uZGF0YX0gPSBmaWVsZERhdGE7XG4gICAgbGV0IGF0dHJzID0gdXRpbHMucHJvY2Vzc0ZpZWxkRGF0YUF0dHJzKGRhdGEsIGlzUHJldmlldyk7XG4gICAgbGV0IG9wdGlvblR5cGUgPSB0eXBlLnJlcGxhY2UoJy1ncm91cCcsICcnKTtcbiAgICBsZXQgaXNTZWxlY3QgPSB0eXBlID09PSAnc2VsZWN0JztcblxuICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgIGlmIChhdHRycy5wbGFjZWhvbGRlciAmJiBpc1NlbGVjdCkge1xuICAgICAgICBvcHRpb25zLnB1c2gobSgnb3B0aW9uJywgYXR0cnMucGxhY2Vob2xkZXIsIHtcbiAgICAgICAgICBkaXNhYmxlZDogbnVsbCxcbiAgICAgICAgICBzZWxlY3RlZDogbnVsbFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCB7bGFiZWwgPSAnJywgLi4ub3B0aW9uQXR0cnN9ID0gdmFsdWVzW2ldO1xuXG4gICAgICAgIG9wdGlvbkF0dHJzLmlkID0gYCR7YXR0cnMuaWR9LSR7aX1gO1xuICAgICAgICBpZiAoIW9wdGlvbkF0dHJzLnNlbGVjdGVkIHx8IGF0dHJzLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbkF0dHJzLnNlbGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzU2VsZWN0KSB7XG4gICAgICAgICAgbGV0IG8gPSBtKCdvcHRpb24nLCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsYWJlbCksIG9wdGlvbkF0dHJzKTtcbiAgICAgICAgICBvcHRpb25zLnB1c2gobyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IG9wdGlvblR5cGU7XG4gICAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gYGZiLSR7b3B0aW9uVHlwZX0taW5saW5lYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3B0aW9uQXR0cnMudHlwZSA9IG9wdGlvblR5cGU7XG4gICAgICAgICAgaWYgKG9wdGlvbkF0dHJzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICBvcHRpb25BdHRycy5jaGVja2VkID0gJ2NoZWNrZWQnO1xuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbkF0dHJzLnNlbGVjdGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgaW5wdXQgPSBtKCdpbnB1dCcsIG51bGwsIE9iamVjdC5hc3NpZ24oe30sIGF0dHJzLCBvcHRpb25BdHRycykpO1xuICAgICAgICAgIGxldCBsYWJlbEF0dHJzID0ge2Zvcjogb3B0aW9uQXR0cnMuaWR9O1xuICAgICAgICAgIGxldCBsYWJlbENvbnRlbnQgPSBbaW5wdXQsIGxhYmVsXTtcbiAgICAgICAgICBpZiAodG9nZ2xlKSB7XG4gICAgICAgICAgICBsZXQga2NUb2dnbGUgPSBtKCdzcGFuJyk7XG4gICAgICAgICAgICBsYWJlbENvbnRlbnQgPSBbaW5wdXQsIGtjVG9nZ2xlLCBsYWJlbF07XG4gICAgICAgICAgICBsYWJlbEF0dHJzLmNsYXNzTmFtZSA9ICdrYy10b2dnbGUnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBpbnB1dExhYmVsID0gbSgnbGFiZWwnLCBsYWJlbENvbnRlbnQsIGxhYmVsQXR0cnMpO1xuICAgICAgICAgIGxldCB3cmFwcGVyID0gbSgnZGl2JywgaW5wdXRMYWJlbCwge2NsYXNzTmFtZTogd3JhcHBlckNsYXNzfSk7XG4gICAgICAgICAgb3B0aW9ucy5wdXNoKHdyYXBwZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNTZWxlY3QgJiYgb3RoZXIpIHtcbiAgICAgICAgbGV0IG90aGVyT3B0aW9uQXR0cnMgPSB7XG4gICAgICAgICAgaWQ6IGAke2F0dHJzLmlkfS1vdGhlcmAsXG4gICAgICAgICAgY2xhc3NOYW1lOiBgJHthdHRycy5jbGFzc05hbWV9IG90aGVyLW9wdGlvbmAsXG4gICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICBjbGljazogKCkgPT4gdXRpbHMub3RoZXJPcHRpb25DQihvdGhlck9wdGlvbkF0dHJzLmlkKVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gbGV0IGxhYmVsID0gbWkxOG4uY3VycmVudC5vdGhlcjtcbiAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IG9wdGlvblR5cGU7XG4gICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICB3cmFwcGVyQ2xhc3MgKz0gJy1pbmxpbmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9wdGlvbkF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSwgb3RoZXJPcHRpb25BdHRycyk7XG4gICAgICAgIG9wdGlvbkF0dHJzLnR5cGUgPSBvcHRpb25UeXBlO1xuXG4gICAgICAgIGxldCBvdGhlclZhbEF0dHJzID0ge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICAgICAgaWQ6IGAke290aGVyT3B0aW9uQXR0cnMuaWR9LXZhbHVlYCxcbiAgICAgICAgICBjbGFzc05hbWU6ICdvdGhlci12YWwnXG4gICAgICAgIH07XG4gICAgICAgIGxldCBvdGhlcklucHV0cyA9IFtcbiAgICAgICAgICBtKCdpbnB1dCcsIG51bGwsIG9wdGlvbkF0dHJzKSxcbiAgICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnT3RoZXInKSxcbiAgICAgICAgICBtKCdpbnB1dCcsIG51bGwsIG90aGVyVmFsQXR0cnMpXG4gICAgICAgIF07XG4gICAgICAgIGxldCBpbnB1dExhYmVsID0gbSgnbGFiZWwnLCBvdGhlcklucHV0cywge2Zvcjogb3B0aW9uQXR0cnMuaWR9KTtcbiAgICAgICAgbGV0IHdyYXBwZXIgPSBtKCdkaXYnLCBpbnB1dExhYmVsLCB7Y2xhc3NOYW1lOiB3cmFwcGVyQ2xhc3N9KTtcbiAgICAgICAgb3B0aW9ucy5wdXNoKHdyYXBwZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0ZW1wbGF0ZTtcblxuICAgIGlmICh0eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgdGVtcGxhdGUgPSBtKG9wdGlvblR5cGUsIG9wdGlvbnMsIGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wbGF0ZSA9IG0oJ2RpdicsIG9wdGlvbnMsIHtjbGFzc05hbWU6IHR5cGV9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgdXRpbHMuZGVmYXVsdEZpZWxkID0gZmllbGREYXRhID0+IHtcbiAgICBsZXQge2xhYmVsLCBkZXNjcmlwdGlvbiwgc3VidHlwZSwgdHlwZSwgaWQsIGlzUHJldmlldywgLi4uZGF0YX0gPSBmaWVsZERhdGE7XG4gICAgaWYgKGlkKSB7XG4gICAgICBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgICAgICBkYXRhLm5hbWUgPSBkYXRhLm5hbWUgKyAnLXByZXZpZXcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGEubmFtZSA9IHV0aWxzLm5hbWVBdHRyKGZpZWxkRGF0YSkgKyAnLXByZXZpZXcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkYXRhLmlkID0gZGF0YS5uYW1lO1xuICAgIH1cbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIGRhdGEudGl0bGUgPSBkZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgaWYgKHN1YnR5cGUpIHtcbiAgICAgIHR5cGUgPSBzdWJ0eXBlO1xuICAgIH1cblxuICAgIGxldCBmaWVsZCA9IHtcbiAgICAgIGZpZWxkOiBtKHR5cGUsIHV0aWxzLnBhcnNlZEh0bWwobGFiZWwpLCBkYXRhKSxcbiAgICAgIG9uUmVuZGVyOiB1dGlscy5ub29wXG4gICAgfTtcblxuICAgIHJldHVybiAoKSA9PiBmaWVsZDtcbiAgfTtcblxuICAvKipcbiAgICogTG9hZHMgYW4gYXJyYXkgb2Ygc2NyaXB0cyB1c2luZyBqUXVlcnkncyBgZ2V0U2NyaXB0YFxuICAgKiBAcGFyYW0gIHtBcnJheXxTdHJpbmd9ICBzY3JpcHRTY3IgICAgc2NyaXB0c1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHBhdGggICBvcHRpb25hbCB0byBsb2FkIGZvcm1cbiAgICogQHJldHVybiB7UHJvbWlzZX0gICAgICAgYSBwcm9taXNlXG4gICAqL1xuICB1dGlscy5nZXRTY3JpcHRzID0gKHNjcmlwdFNjciwgcGF0aCkgPT4ge1xuICAgIGNvbnN0ICQgPSBqUXVlcnk7XG4gICAgbGV0IF9hcnIgPSBbXTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShzY3JpcHRTY3IpKSB7XG4gICAgICBzY3JpcHRTY3IgPSBbc2NyaXB0U2NyXTtcbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzLmlzQ2FjaGVkKHNjcmlwdFNjcikpIHtcbiAgICAgIF9hcnIgPSAkLm1hcChzY3JpcHRTY3IsIHNyYyA9PiB7XG4gICAgICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICB1cmw6IChwYXRoIHx8ICcnKSArIHNyY1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gJC5hamF4KG9wdGlvbnMpLmRvbmUoKCkgPT4gd2luZG93LmZiTG9hZGVkLmpzLnB1c2goc3JjKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBfYXJyLnB1c2goJC5EZWZlcnJlZCggZGVmZXJyZWQgPT4gJCggZGVmZXJyZWQucmVzb2x2ZSApKSk7XG5cbiAgICByZXR1cm4gJC53aGVuKC4uLl9hcnIpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcmVtb3RlIHJlc291cmNlIGlzIGFscmVhZHkgbG9hZGVkXG4gICAqIEBwYXJhbSAge1N0cmluZ3xBcnJheX0gc3JjICB1cmwgb2YgcmVtb3RlIHNjcmlwdCBvciBjc3NcbiAgICogQHBhcmFtICB7U3RyaW5nfSAgICAgICB0eXBlICAgICAgICdqcycgb3IgJ2NzcydcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gICAgICBpc0NhY2hlZFxuICAgKi9cbiAgdXRpbHMuaXNDYWNoZWQgPSAoc3JjLCB0eXBlID0gJ2pzJykgPT4ge1xuICAgIGxldCBpc0NhY2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGNhY2hlID0gd2luZG93LmZiTG9hZGVkW3R5cGVdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNyYykpIHtcbiAgICAgIGlzQ2FjaGVkID0gc3JjLmV2ZXJ5KHMgPT4gdXRpbHMuaW5BcnJheShzLCBjYWNoZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0NhY2hlZCA9IHV0aWxzLmluQXJyYXkoc3JjLCBjYWNoZSk7XG4gICAgfVxuICAgIHJldHVybiBpc0NhY2hlZDtcbiAgfTtcblxuICAvKipcbiAgICogQXBwZW5kcyBzdHlsZXNoZWV0cyB0byB0aGUgaGVhZFxuICAgKiBAcGFyYW0gIHtBcnJheX0gc2NyaXB0U2NyXG4gICAqIEBwYXJhbSAge1N0cmluZ30gcGF0aFxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgdXRpbHMuZ2V0U3R5bGVzID0gKHNjcmlwdFNjciwgcGF0aCkgPT4ge1xuICAgIGlmICh1dGlscy5pc0NhY2hlZChzY3JpcHRTY3IsICdjc3MnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhcHBlbmRTdHlsZSA9IChocmVmKSA9PiB7XG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgbGluay50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgbGluay5ocmVmID0gaHJlZjtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICB3aW5kb3cuZmJMb2FkZWQuY3NzLnB1c2goaHJlZik7XG4gICAgfTtcbiAgICBzY3JpcHRTY3IuZm9yRWFjaChzcmMgPT4gYXBwZW5kU3R5bGUoKHBhdGggfHwgJycpICsgc3JjKSk7XG4gIH07XG5cbiAgdXRpbHMubG9uZ1RleHRUZW1wbGF0ZSA9IGRhdGEgPT4ge1xuICAgIGxldCB7dmFsdWUgPSAnJywgLi4uYXR0cnN9ID0gZGF0YTtcbiAgICBsZXQgdGVtcGxhdGUgPSB7XG4gICAgICBmaWVsZDogbSgndGV4dGFyZWEnLCB1dGlscy5wYXJzZWRIdG1sKHZhbHVlKSwgYXR0cnMpXG4gICAgfTtcbiAgICBsZXQgZWRpdG9ycyA9IHtcbiAgICAgIHRpbnltY2U6IHtcbiAgICAgICAganM6IFsnLy9jZG4udGlueW1jZS5jb20vNC90aW55bWNlLm1pbi5qcyddLFxuICAgICAgICBvblJlbmRlcjogZXZ0ID0+IHtcbiAgICAgICAgICBpZiAod2luZG93LnRpbnltY2UuZWRpdG9yc1tkYXRhLmlkXSkge1xuICAgICAgICAgICAgd2luZG93LnRpbnltY2UuZWRpdG9yc1tkYXRhLmlkXS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2luZG93LnRpbnltY2UuaW5pdCh7XG4gICAgICAgICAgICB0YXJnZXQ6IHRlbXBsYXRlLmZpZWxkLFxuICAgICAgICAgICAgaGVpZ2h0OiAyNTAsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICdhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvcicsXG4gICAgICAgICAgICAgICdzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4nLFxuICAgICAgICAgICAgICAnaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgY29udGV4dG1lbnUgcGFzdGUgY29kZSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB0b29sYmFyOiAnaW5zZXJ0ZmlsZSB1bmRvIHJlZG8gfCBzdHlsZXNlbGVjdCB8IGJvbGQgaXRhbGljIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgYWxpZ25qdXN0aWZ5IHwgYnVsbGlzdCBudW1saXN0IG91dGRlbnQgaW5kZW50IHwgbGluayBpbWFnZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHF1aWxsOiB7XG4gICAgICAgIGpzOiBbJy8vY2RuLnF1aWxsanMuY29tLzEuMS4zL3F1aWxsLmpzJ10sXG4gICAgICAgIGNzczogWycvL2Nkbi5xdWlsbGpzLmNvbS8xLjEuMy9xdWlsbC5zbm93LmNzcyddLFxuICAgICAgICBvblJlbmRlcjogZXZ0ID0+IHtcbiAgICAgICAgICBjb25zdCBEZWx0YSA9IHdpbmRvdy5RdWlsbC5pbXBvcnQoJ2RlbHRhJyk7XG4gICAgICAgICAgd2luZG93LmZiRWRpdG9ycy5xdWlsbFtkYXRhLmlkXSA9IHt9O1xuICAgICAgICAgIGxldCBlZGl0b3IgPSB3aW5kb3cuZmJFZGl0b3JzLnF1aWxsW2RhdGEuaWRdO1xuICAgICAgICAgIGVkaXRvci5pbnN0YW5jZSA9IG5ldyB3aW5kb3cuUXVpbGwodGVtcGxhdGUuZmllbGQsIHtcbiAgICAgICAgICAgIG1vZHVsZXM6IHtcbiAgICAgICAgICAgICAgdG9vbGJhcjogW1xuICAgICAgICAgICAgICAgIFt7J2hlYWRlcic6IFsxLCAyLCBmYWxzZV19XSxcbiAgICAgICAgICAgICAgICBbJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZSddLFxuICAgICAgICAgICAgICAgIFsnY29kZS1ibG9jayddXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogYXR0cnMucGxhY2Vob2xkZXIgfHwgJycsXG4gICAgICAgICAgICB0aGVtZTogJ3Nub3cnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWRpdG9yLmRhdGEgPSBuZXcgRGVsdGEoKTtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGVkaXRvci5pbnN0YW5jZS5zZXRDb250ZW50cyh3aW5kb3cuSlNPTi5wYXJzZSh1dGlscy5wYXJzZWRIdG1sKHZhbHVlKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlZGl0b3IuaW5zdGFuY2Uub24oJ3RleHQtY2hhbmdlJywgZnVuY3Rpb24oZGVsdGEpIHtcbiAgICAgICAgICAgIGVkaXRvci5kYXRhID0gZWRpdG9yLmRhdGEuY29tcG9zZShkZWx0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ3RleHRhcmVhJykge1xuICAgICAgdGVtcGxhdGUub25SZW5kZXIgPSBlZGl0b3JzW2RhdGEudHlwZV0ub25SZW5kZXI7XG4gICAgfVxuICAgIGlmIChkYXRhLnR5cGUgPT09ICdxdWlsbCcpIHtcbiAgICAgIHRlbXBsYXRlLmZpZWxkID0gbSgnZGl2JywgbnVsbCwgYXR0cnMpO1xuICAgIH1cblxuICAgIGNvbnN0IG9uUmVuZGVyID0gKCkgPT4ge1xuICAgICAgaWYgKGVkaXRvcnNbZGF0YS50eXBlXSkge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmaWVsZFJlbmRlcmVkJywgb25SZW5kZXIpO1xuXG4gICAgICAgIGlmIChlZGl0b3JzW2RhdGEudHlwZV0uY3NzKSB7XG4gICAgICAgICAgdXRpbHMuZ2V0U3R5bGVzKGVkaXRvcnNbZGF0YS50eXBlXS5jc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlZGl0b3JzW2RhdGEudHlwZV0uanMgJiYgIXV0aWxzLmlzQ2FjaGVkKGVkaXRvcnNbZGF0YS50eXBlXS5qcykpIHtcbiAgICAgICAgICB1dGlscy5nZXRTY3JpcHRzKGVkaXRvcnNbZGF0YS50eXBlXS5qcykuZG9uZSh0ZW1wbGF0ZS5vblJlbmRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVtcGxhdGUub25SZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4ge2ZpZWxkOiB0ZW1wbGF0ZS5maWVsZCwgb25SZW5kZXJ9O1xuICB9O1xuXG4gIHV0aWxzLnRlbXBsYXRlcyA9IFtcbiAgICBbJ2F1dG9jb21wbGV0ZScsXG4gICAgICBmaWVsZERhdGEgPT4ge1xuICAgICAgbGV0IGF0dHJzID0gdXRpbHMucHJvY2Vzc0ZpZWxkRGF0YUF0dHJzKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCBmaWVsZExhYmVsID0gdXRpbHMubWFrZUxhYmVsKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCBhdXRvY29tcGxldGUgPSB1dGlscy5hdXRvY29tcGxldGVUZW1wbGF0ZShhdHRycyk7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHtcbiAgICAgICAgICBmaWVsZDogW2ZpZWxkTGFiZWwsIGF1dG9jb21wbGV0ZS5maWVsZF0sXG4gICAgICAgICAgb25SZW5kZXI6IGF1dG9jb21wbGV0ZS5vblJlbmRlclxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XSxcbiAgICBbZGVmYXVsdFN1YnR5cGVzLnRleHQuY29uY2F0KFsnbnVtYmVyJywgJ2ZpbGUnLCAnZGF0ZSddKSxcbiAgICAgIGZpZWxkRGF0YSA9PiB7XG4gICAgICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhmaWVsZERhdGEpO1xuICAgICAgICBsZXQgZmllbGRMYWJlbCA9IHV0aWxzLm1ha2VMYWJlbChmaWVsZERhdGEpO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSB7XG4gICAgICAgICAgZmllbGQ6IFtmaWVsZExhYmVsLCBtKCdpbnB1dCcsIG51bGwsIGF0dHJzKV0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1dLFxuICAgIFtbJ3BhcmFncmFwaCddLmNvbmNhdChkZWZhdWx0U3VidHlwZXMucGFyYWdyYXBoKSxcbiAgICAgIGZpZWxkRGF0YSA9PiB7XG4gICAgICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhmaWVsZERhdGEpO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSB7XG4gICAgICAgICAgZmllbGQ6IFttKGZpZWxkRGF0YS50eXBlLCB1dGlscy5wYXJzZWRIdG1sKGZpZWxkRGF0YS5sYWJlbCksIGF0dHJzKV0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1dLFxuICAgIFtkZWZhdWx0U3VidHlwZXMuYnV0dG9uLFxuICAgICAgZmllbGREYXRhID0+IHtcbiAgICAgICAgbGV0IGF0dHJzID0gdXRpbHMucHJvY2Vzc0ZpZWxkRGF0YUF0dHJzKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHtcbiAgICAgICAgICBmaWVsZDogbSgnYnV0dG9uJywgZmllbGREYXRhLmxhYmVsLCBhdHRycyksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1dLFxuICAgIFtbJ3NlbGVjdCcsICdjaGVja2JveC1ncm91cCcsICdyYWRpby1ncm91cCcsICdjaGVja2JveCddLFxuICAgICAgZmllbGREYXRhID0+IHtcbiAgICAgICAgbGV0IGZpZWxkTGFiZWwgPSB1dGlscy5tYWtlTGFiZWwoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IGZpZWxkID0gdXRpbHMuc2VsZWN0VGVtcGxhdGUoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0ge1xuICAgICAgICAgIGZpZWxkOiBbZmllbGRMYWJlbCwgZmllbGRdXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1dLFxuICAgIFtbJ3RleHRhcmVhJywgJ3RpbnltY2UnLCAncXVpbGwnXSxcbiAgICAgIGZpZWxkRGF0YSA9PiB7XG4gICAgICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhmaWVsZERhdGEpO1xuICAgICAgICBsZXQgZmllbGQgPSB1dGlscy5sb25nVGV4dFRlbXBsYXRlKGF0dHJzKTtcbiAgICAgICAgbGV0IGZpZWxkTGFiZWwgPSB1dGlscy5tYWtlTGFiZWwoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0ge1xuICAgICAgICAgIGZpZWxkOiBbZmllbGRMYWJlbCwgZmllbGQuZmllbGRdLFxuICAgICAgICAgIG9uUmVuZGVyOiBmaWVsZC5vblJlbmRlclxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XVxuICAgIF07XG5cbiAgdXRpbHMucHJvY2Vzc0ZpZWxkRGF0YUF0dHJzID0gZmllbGREYXRhID0+IHtcbiAgICBsZXQge1xuICAgICAgbGFiZWwsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHN1YnR5cGUsXG4gICAgICAuLi5hdHRyc30gPSBmaWVsZERhdGE7XG5cbiAgICBpZiAoIWF0dHJzLmlkKSB7XG4gICAgICBhdHRycy5pZCA9IGF0dHJzLm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHN1YnR5cGUpIHtcbiAgICAgIGF0dHJzLnR5cGUgPSBzdWJ0eXBlO1xuICAgIH1cblxuICAgIGlmIChhdHRycy5tdWx0aXBsZSB8fCBhdHRycy50eXBlID09PSAnY2hlY2tib3gtZ3JvdXAnKSB7XG4gICAgICBhdHRycy5uYW1lID0gYXR0cnMubmFtZSArICdbXSc7XG4gICAgfVxuXG4gICAgaWYgKGF0dHJzLnJlcXVpcmVkKSB7XG4gICAgICBhdHRycy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICBhdHRyc1snYXJpYS1yZXF1aXJlZCddID0gJ3RydWUnO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRycztcbiAgfTtcblxuICB1dGlscy5nZXRUZW1wbGF0ZSA9IChmaWVsZERhdGEsIGlzUHJldmlldyA9IGZhbHNlKSA9PiB7XG4gICAgbGV0IGZpZWxkO1xuICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgIGlmIChmaWVsZERhdGEubmFtZSkge1xuICAgICAgICBmaWVsZERhdGEubmFtZSA9IGZpZWxkRGF0YS5uYW1lICsgJy1wcmV2aWV3JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkRGF0YS5uYW1lID0gdXRpbHMubmFtZUF0dHIoZmllbGREYXRhKSArICctcHJldmlldyc7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCB0ZW1wbGF0ZSA9IHV0aWxzLnRlbXBsYXRlTWFwKGZpZWxkRGF0YS50eXBlKTtcblxuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZShmaWVsZERhdGEsIGlzUHJldmlldyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBsYXRlID0gdXRpbHMuZGVmYXVsdEZpZWxkKGZpZWxkRGF0YSwgaXNQcmV2aWV3KSgpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZERhdGEudHlwZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgIGxldCB3cmFwcGVyQXR0cnMgPSB7fTtcbiAgICAgIGlmIChmaWVsZERhdGEubmFtZSkge1xuICAgICAgICB3cmFwcGVyQXR0cnMuY2xhc3NOYW1lID1cbiAgICAgICAgYGZiLSR7ZmllbGREYXRhLnR5cGV9IGZvcm0tZ3JvdXAgZmllbGQtJHtmaWVsZERhdGEubmFtZX1gO1xuICAgICAgfVxuICAgICAgZmllbGQgPSB1dGlscy5tYXJrdXAoJ2RpdicsIHRlbXBsYXRlLmZpZWxkLCB3cmFwcGVyQXR0cnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgYXR0cnMgPSB1dGlscy5wcm9jZXNzRmllbGREYXRhQXR0cnMoZmllbGREYXRhKTtcbiAgICAgIGZpZWxkID0gdXRpbHMubWFya3VwKCdpbnB1dCcsIG51bGwsIGF0dHJzKTtcbiAgICB9XG5cbiAgICBpZiAodGVtcGxhdGUub25SZW5kZXIpIHtcbiAgICAgIGZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2ZpZWxkUmVuZGVyZWQnLCB0ZW1wbGF0ZS5vblJlbmRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkO1xuICB9O1xuXG4vKipcbiAqIENhbGxiYWNrIGZvciBvdGhlciBvcHRpb24uXG4gKiBUb2dnbGVzIHRoZSBoaWRkZW4gdGV4dCBhcmVhIGZvciBcIm90aGVyXCIgb3B0aW9uLlxuICogQHBhcmFtICB7U3RyaW5nfSBvdGhlcklkIGlkIG9mIHRoZSBcIm90aGVyXCIgb3B0aW9uIGlucHV0XG4gKi9cbnV0aWxzLm90aGVyT3B0aW9uQ0IgPSBvdGhlcklkID0+IHtcbiAgY29uc3Qgb3RoZXJJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG90aGVySWQpO1xuICBjb25zdCBvdGhlcklucHV0VmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtvdGhlcklkfS12YWx1ZWApO1xuXG4gIGlmIChvdGhlcklucHV0LmNoZWNrZWQpIHtcbiAgICBvdGhlcklucHV0VmFsdWUuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICB9IGVsc2Uge1xuICAgIG90aGVySW5wdXRWYWx1ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG59O1xuXG4vKipcbiAqIENhcGl0YWxpemVzIGEgc3RyaW5nXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHN0ciB1bmNhcGl0YWxpemVkIHN0cmluZ1xuICogQHJldHVybiB7U3RyaW5nfSBzdHIgY2FwaXRhbGl6ZWQgc3RyaW5nXG4gKi9cbnV0aWxzLmNhcGl0YWxpemUgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcYlxcdy9nLCBmdW5jdGlvbihtKSB7XG4gICAgICByZXR1cm4gbS50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xufTtcblxuXG51dGlscy5tZXJnZSA9IChvYmoxLCBvYmoyKSA9PiB7XG4gIGxldCBtZXJnZWRPYmogPSBPYmplY3QuYXNzaWduKHt9LCBvYmoxLCBvYmoyKTtcbiAgZm9yIChsZXQgcHJvcCBpbiBvYmoyKSB7XG4gICAgaWYgKG1lcmdlZE9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqMltwcm9wXSkpIHtcbiAgICAgICAgbWVyZ2VkT2JqW3Byb3BdID0gQXJyYXkuaXNBcnJheShvYmoxW3Byb3BdKSA/IHV0aWxzLnVuaXF1ZShvYmoxW3Byb3BdLmNvbmNhdChvYmoyW3Byb3BdKSkgOiBvYmoyW3Byb3BdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqMltwcm9wXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbWVyZ2VkT2JqW3Byb3BdID0gdXRpbHMubWVyZ2Uob2JqMVtwcm9wXSwgb2JqMltwcm9wXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXJnZWRPYmpbcHJvcF0gPSBvYmoyW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWVyZ2VkT2JqO1xufTtcblxudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcnMgPSAoZWwsIGV2dHMsIGZuKSA9PiB7XG4gIHJldHVybiBldnRzLnNwbGl0KCcgJykuZm9yRWFjaChlID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoZSwgZm4sIGZhbHNlKSk7XG59O1xuXG4vKipcbiAqIEZpbmQgdGhlIGNsb3Nlc3QgcGFyZW50IGJ5IGNsYXNzXG4gKiBAcGFyYW0gIHtPYmplY3R9IGVsICBET00gZWxlbWVudFxuICogQHBhcmFtICB7U3RyaW5nfSBjbHMgY2xhc3NcbiAqIEByZXR1cm4ge09iamVjdH0gICAgIERPTSBFbGVtZW50XG4gKi9cbnV0aWxzLmNsb3Nlc3QgPSAoZWwsIGNscykgPT4ge1xuICBsZXQgY2xhc3NOYW1lID0gY2xzLnJlcGxhY2UoJy4nLCAnJyk7XG4gIHdoaWxlICgoZWwgPSBlbC5wYXJlbnRFbGVtZW50KSAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpO1xuICByZXR1cm4gZWw7XG59O1xuXG51dGlscy5ub29wID0gKCkgPT4gbnVsbDtcblxudXRpbHMuZGVib3VuY2UgPSAoZnVuYywgd2FpdCA9IDI1MCwgaW1tZWRpYXRlID0gZmFsc2UpID0+IHtcbiAgbGV0IHRpbWVvdXQ7XG4gIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgbGV0IGNvbnRleHQgPSB0aGlzO1xuICAgIGxldCBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH07XG4gICAgbGV0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICBpZiAoY2FsbE5vdykge1xuICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIG1vYmlsZSBjbGFzc1xuICogQHRvZG8gZmluZCBjc3Mgb25seSBzb2x1dGlvblxuICogQHJldHVybiB7U3RyaW5nfSBNb2JpbGUgY2xhc3MgYWRkZWQgdG8gZm9ybUJ1aWxkZXJcbiAqL1xudXRpbHMubW9iaWxlQ2xhc3MgPSAoKSA9PiB7XG4gIGxldCBtb2JpbGVDbGFzcyA9ICcnO1xuICAoZnVuY3Rpb24oYSkge1xuICAgIGlmICgvKGFuZHJvaWR8YmJcXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVxcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXFwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgY2V8eGRhfHhpaW5vL2kudGVzdChhKSB8fCAvMTIwN3w2MzEwfDY1OTB8M2dzb3w0dGhwfDUwWzEtNl1pfDc3MHN8ODAyc3xhIHdhfGFiYWN8YWMoZXJ8b298c1xcLSl8YWkoa298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXxcXC1tfHIgfHMgKXxhdmFufGJlKGNrfGxsfG5xKXxiaShsYnxyZCl8YmwoYWN8YXopfGJyKGV8dil3fGJ1bWJ8YndcXC0obnx1KXxjNTVcXC98Y2FwaXxjY3dhfGNkbVxcLXxjZWxsfGNodG18Y2xkY3xjbWRcXC18Y28obXB8bmQpfGNyYXd8ZGEoaXR8bGx8bmcpfGRidGV8ZGNcXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFxcLWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseShcXC18Xyl8ZzEgdXxnNTYwfGdlbmV8Z2ZcXC01fGdcXC1tb3xnbyhcXC53fG9kKXxncihhZHx1bil8aGFpZXxoY2l0fGhkXFwtKG18cHx0KXxoZWlcXC18aGkocHR8dGEpfGhwKCBpfGlwKXxoc1xcLWN8aHQoYyhcXC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXFwtKDIwfGdvfG1hKXxpMjMwfGlhYyggfFxcLXxcXC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XFwvKXxrbG9ufGtwdCB8a3djXFwtfGt5byhjfGspfGxlKG5vfHhpKXxsZyggZ3xcXC8oa3xsfHUpfDUwfDU0fFxcLVthLXddKXxsaWJ3fGx5bnh8bTFcXC13fG0zZ2F8bTUwXFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bVxcLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFxcLXwgfG98dil8enopfG10KDUwfHAxfHYgKXxtd2JwfG15d2F8bjEwWzAtMl18bjIwWzItM118bjMwKDB8Mil8bjUwKDB8Mnw1KXxuNygwKDB8MSl8MTApfG5lKChjfG0pXFwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcXC0oWzEtOF18YykpfHBoaWx8cGlyZXxwbChheXx1Yyl8cG5cXC0yfHBvKGNrfHJ0fHNlKXxwcm94fHBzaW98cHRcXC1nfHFhXFwtYXxxYygwN3wxMnwyMXwzMnw2MHxcXC1bMi03XXxpXFwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVxcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aFxcLXxvb3xwXFwtKXxzZGtcXC98c2UoYyhcXC18MHwxKXw0N3xtY3xuZHxyaSl8c2doXFwtfHNoYXJ8c2llKFxcLXxtKXxza1xcLTB8c2woNDV8aWQpfHNtKGFsfGFyfGIzfGl0fHQ1KXxzbyhmdHxueSl8c3AoMDF8aFxcLXx2XFwtfHYgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXFwtfHRkZ1xcLXx0ZWwoaXxtKXx0aW1cXC18dFxcLW1vfHRvKHBsfHNoKXx0cyg3MHxtXFwtfG0zfG01KXx0eFxcLTl8dXAoXFwuYnxnMXxzaSl8dXRzdHx2NDAwfHY3NTB8dmVyaXx2aShyZ3x0ZSl8dmsoNDB8NVswLTNdfFxcLXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoXFwtfCApfHdlYmN8d2hpdHx3aShnIHxuY3xudyl8d21sYnx3b251fHg3MDB8eWFzXFwtfHlvdXJ8emV0b3x6dGVcXC0vaS50ZXN0KGEuc3Vic3RyKDAsIDQpKSkge1xuICAgICAgbW9iaWxlQ2xhc3MgPSAnIGZiLW1vYmlsZSc7XG4gICAgfVxuICB9KShuYXZpZ2F0b3IudXNlckFnZW50IHx8IG5hdmlnYXRvci52ZW5kb3IgfHwgd2luZG93Lm9wZXJhKTtcbiAgcmV0dXJuIG1vYmlsZUNsYXNzO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IGNvbnZlcnRzIG1lc3N5IGBjbCNzc05hbWVzYCBpbnRvIHZhbGlkIGBjbGFzcy1uYW1lc2BcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7U3RyaW5nfSBoeXBoZW5hdGVkIHN0cmluZ1xuICovXG51dGlscy5tYWtlQ2xhc3NOYW1lID0gc3RyID0+IHtcbiAgcmV0dXJuIHV0aWxzLmh5cGhlbkNhc2Uoc3RyLnJlcGxhY2UoL1teXFx3XFxzXFwtXS9naSwgJycpKTtcbn07XG5cbi8qKlxuICogTWFrZSBzdHJpbmdzIHNhZmUgdG8gYmUgdXNlZCBhcyBjbGFzc2VzXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBzdHIgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZFxuICogQHJldHVybiB7U3RyaW5nfSAgICAgY29udmVydGVyIHN0cmluZ1xuICovXG51dGlscy5zYWZlbmFtZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFxzL2csICctJykucmVwbGFjZSgvW15hLXpBLVowLTlcXFtcXF1cXF8tXS9nLCAnJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICogU3RyaXBzIG5vbi1udW1iZXJzIGZyb20gYSBudW1iZXIgb25seSBpbnB1dFxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gc3RyIHN0cmluZyB3aXRoIHBvc3NpYmxlIG51bWJlclxuICogQHJldHVybiB7c3RyaW5nfSAgICAgc3RyaW5nIHdpdGhvdXQgbnVtYmVyc1xuICovXG51dGlscy5mb3JjZU51bWJlciA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvW14wLTldL2csICcnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19 diff --git a/demo/assets/js/form-builder.min.js b/demo/assets/js/form-builder.min.js index 2153a110d..686ad212a 100644 --- a/demo/assets/js/form-builder.min.js +++ b/demo/assets/js/form-builder.min.js @@ -6,5 +6,5 @@ Author: Kevin Chappell !function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!s&&l)return l(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return o(n?n:e)},u,u.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}},{}],15:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}n.__esModule=!0;var o=e("../core-js/is-iterable"),i=r(o),a=e("../core-js/get-iterator"),s=r(a);n.default=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,l=(0,s.default)(e);!(r=(a=l.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&l.return&&l.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if((0,i.default)(Object(t)))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},{"../core-js/get-iterator":2,"../core-js/is-iterable":3}],16:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}n.__esModule=!0;var o=e("../core-js/array/from"),i=r(o);n.default=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu;)if(s=l[u++],s!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}}},{"./_to-index":97,"./_to-iobject":99,"./_to-length":100}],35:[function(e,t,n){var r=e("./_ctx"),o=e("./_iobject"),i=e("./_to-object"),a=e("./_to-length"),s=e("./_array-species-create");t.exports=function(e,t){var n=1==e,l=2==e,c=3==e,u=4==e,f=6==e,d=5==e||f,p=t||s;return function(t,s,v){for(var h,m,y=i(t),b=o(y),g=r(s,v,3),_=a(b.length),w=0,x=n?p(t,_):l?p(t,0):void 0;_>w;w++)if((d||w in b)&&(h=b[w],m=g(h,w,y),e))if(n)x[w]=m;else if(m)switch(e){case 3:return!0;case 5:return h;case 6:return w;case 2:x.push(h)}else if(u)return!1;return f?-1:c||u?u:x}}},{"./_array-species-create":37,"./_ctx":45,"./_iobject":60,"./_to-length":100,"./_to-object":101}],36:[function(e,t,n){var r=e("./_is-object"),o=e("./_is-array"),i=e("./_wks")("species");t.exports=function(e){var t;return o(e)&&(t=e.constructor,"function"!=typeof t||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&(t=t[i],null===t&&(t=void 0))),void 0===t?Array:t}},{"./_is-array":62,"./_is-object":63,"./_wks":106}],37:[function(e,t,n){var r=e("./_array-species-constructor");t.exports=function(e,t){return new(r(e))(t)}},{"./_array-species-constructor":36}],38:[function(e,t,n){var r=e("./_cof"),o=e("./_wks")("toStringTag"),i="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(e){}};t.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),o))?n:i?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},{"./_cof":39,"./_wks":106}],39:[function(e,t,n){var r={}.toString;t.exports=function(e){return r.call(e).slice(8,-1)}},{}],40:[function(e,t,n){"use strict";var r=e("./_object-dp").f,o=e("./_object-create"),i=e("./_redefine-all"),a=e("./_ctx"),s=e("./_an-instance"),l=e("./_defined"),c=e("./_for-of"),u=e("./_iter-define"),f=e("./_iter-step"),d=e("./_set-species"),p=e("./_descriptors"),v=e("./_meta").fastKey,h=p?"_s":"size",m=function(e,t){var n,r=v(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};t.exports={getConstructor:function(e,t,n,u){var f=e(function(e,r){s(e,f,t,"_i"),e._i=o(null),e._f=void 0,e._l=void 0,e[h]=0,void 0!=r&&c(r,n,e[u],e)});return i(f.prototype,{clear:function(){for(var e=this,t=e._i,n=e._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete t[n.i];e._f=e._l=void 0,e[h]=0},delete:function(e){var t=this,n=m(t,e);if(n){var r=n.n,o=n.p;delete t._i[n.i],n.r=!0,o&&(o.n=r),r&&(r.p=o),t._f==n&&(t._f=r),t._l==n&&(t._l=o),t[h]--}return!!n},forEach:function(e){s(this,f,"forEach");for(var t,n=a(e,arguments.length>1?arguments[1]:void 0,3);t=t?t.n:this._f;)for(n(t.v,t.k,this);t&&t.r;)t=t.p},has:function(e){return!!m(this,e)}}),p&&r(f.prototype,"size",{get:function(){return l(this[h])}}),f},def:function(e,t,n){var r,o,i=m(e,t);return i?i.v=n:(e._l=i={i:o=v(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=i),r&&(r.n=i),e[h]++,"F"!==o&&(e._i[o]=i)),e},getEntry:m,setStrong:function(e,t,n){u(e,t,function(e,t){this._t=e,this._k=t,this._l=void 0},function(){for(var e=this,t=e._k,n=e._l;n&&n.r;)n=n.p;return e._t&&(e._l=n=n?n.n:e._t._f)?"keys"==t?f(0,n.k):"values"==t?f(0,n.v):f(0,[n.k,n.v]):(e._t=void 0,f(1))},n?"entries":"values",!n,!0),d(t)}}},{"./_an-instance":31,"./_ctx":45,"./_defined":46,"./_descriptors":47,"./_for-of":53,"./_iter-define":66,"./_iter-step":68,"./_meta":72,"./_object-create":75,"./_object-dp":76,"./_redefine-all":88,"./_set-species":90}],41:[function(e,t,n){var r=e("./_classof"),o=e("./_array-from-iterable");t.exports=function(e){return function(){if(r(this)!=e)throw TypeError(e+"#toJSON isn't generic");return o(this)}}},{"./_array-from-iterable":33,"./_classof":38}],42:[function(e,t,n){"use strict";var r=e("./_global"),o=e("./_export"),i=e("./_meta"),a=e("./_fails"),s=e("./_hide"),l=e("./_redefine-all"),c=e("./_for-of"),u=e("./_an-instance"),f=e("./_is-object"),d=e("./_set-to-string-tag"),p=e("./_object-dp").f,v=e("./_array-methods")(0),h=e("./_descriptors");t.exports=function(e,t,n,m,y,b){var g=r[e],_=g,w=y?"set":"add",x=_&&_.prototype,j={};return h&&"function"==typeof _&&(b||x.forEach&&!a(function(){(new _).entries().next()}))?(_=t(function(t,n){u(t,_,e,"_c"),t._c=new g,void 0!=n&&c(n,y,t[w],t)}),v("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(e){var t="add"==e||"set"==e;e in x&&(!b||"clear"!=e)&&s(_.prototype,e,function(n,r){if(u(this,_,e),!t&&b&&!f(n))return"get"==e&&void 0;var o=this._c[e](0===n?0:n,r);return t?this:o})}),"size"in x&&p(_.prototype,"size",{get:function(){return this._c.size}})):(_=m.getConstructor(t,e,y,w),l(_.prototype,n),i.NEED=!0),d(_,e),j[e]=_,o(o.G+o.W+o.F,j),b||m.setStrong(_,e,y),_}},{"./_an-instance":31,"./_array-methods":35,"./_descriptors":47,"./_export":51,"./_fails":52,"./_for-of":53,"./_global":54,"./_hide":56,"./_is-object":63,"./_meta":72,"./_object-dp":76,"./_redefine-all":88,"./_set-to-string-tag":91}],43:[function(e,t,n){var r=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},{}],44:[function(e,t,n){"use strict";var r=e("./_object-dp"),o=e("./_property-desc");t.exports=function(e,t,n){t in e?r.f(e,t,o(0,n)):e[t]=n}},{"./_object-dp":76,"./_property-desc":87}],45:[function(e,t,n){var r=e("./_a-function");t.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},{"./_a-function":29}],46:[function(e,t,n){t.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},{}],47:[function(e,t,n){t.exports=!e("./_fails")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{"./_fails":52}],48:[function(e,t,n){var r=e("./_is-object"),o=e("./_global").document,i=r(o)&&r(o.createElement);t.exports=function(e){return i?o.createElement(e):{}}},{"./_global":54,"./_is-object":63}],49:[function(e,t,n){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],50:[function(e,t,n){var r=e("./_object-keys"),o=e("./_object-gops"),i=e("./_object-pie");t.exports=function(e){var t=r(e),n=o.f;if(n)for(var a,s=n(e),l=i.f,c=0;s.length>c;)l.call(e,a=s[c++])&&t.push(a);return t}},{"./_object-gops":81,"./_object-keys":84,"./_object-pie":85}],51:[function(e,t,n){var r=e("./_global"),o=e("./_core"),i=e("./_ctx"),a=e("./_hide"),s="prototype",l=function(e,t,n){var c,u,f,d=e&l.F,p=e&l.G,v=e&l.S,h=e&l.P,m=e&l.B,y=e&l.W,b=p?o:o[t]||(o[t]={}),g=b[s],_=p?r:v?r[t]:(r[t]||{})[s];p&&(n=t);for(c in n)u=!d&&_&&void 0!==_[c],u&&c in b||(f=u?_[c]:n[c],b[c]=p&&"function"!=typeof _[c]?n[c]:m&&u?i(f,r):y&&_[c]==f?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[s]=e[s],t}(f):h&&"function"==typeof f?i(Function.call,f):f,h&&((b.virtual||(b.virtual={}))[c]=f,e&l.R&&g&&!g[c]&&a(g,c,f)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,t.exports=l},{"./_core":43,"./_ctx":45,"./_global":54,"./_hide":56}],52:[function(e,t,n){t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],53:[function(e,t,n){var r=e("./_ctx"),o=e("./_iter-call"),i=e("./_is-array-iter"),a=e("./_an-object"),s=e("./_to-length"),l=e("./core.get-iterator-method"),c={},u={},n=t.exports=function(e,t,n,f,d){var p,v,h,m,y=d?function(){return e}:l(e),b=r(n,f,t?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(i(y)){for(p=s(e.length);p>g;g++)if(m=t?b(a(v=e[g])[0],v[1]):b(e[g]),m===c||m===u)return m}else for(h=y.call(e);!(v=h.next()).done;)if(m=o(h,b,v.value,t),m===c||m===u)return m};n.BREAK=c,n.RETURN=u},{"./_an-object":32,"./_ctx":45,"./_is-array-iter":61,"./_iter-call":64,"./_to-length":100,"./core.get-iterator-method":107}],54:[function(e,t,n){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},{}],55:[function(e,t,n){var r={}.hasOwnProperty;t.exports=function(e,t){return r.call(e,t)}},{}],56:[function(e,t,n){var r=e("./_object-dp"),o=e("./_property-desc");t.exports=e("./_descriptors")?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},{"./_descriptors":47,"./_object-dp":76,"./_property-desc":87}],57:[function(e,t,n){t.exports=e("./_global").document&&document.documentElement},{"./_global":54}],58:[function(e,t,n){t.exports=!e("./_descriptors")&&!e("./_fails")(function(){return 7!=Object.defineProperty(e("./_dom-create")("div"),"a",{get:function(){return 7}}).a})},{"./_descriptors":47,"./_dom-create":48,"./_fails":52}],59:[function(e,t,n){t.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},{}],60:[function(e,t,n){var r=e("./_cof");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},{"./_cof":39}],61:[function(e,t,n){var r=e("./_iterators"),o=e("./_wks")("iterator"),i=Array.prototype;t.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},{"./_iterators":69,"./_wks":106}],62:[function(e,t,n){var r=e("./_cof");t.exports=Array.isArray||function(e){return"Array"==r(e)}},{"./_cof":39}],63:[function(e,t,n){t.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},{}],64:[function(e,t,n){var r=e("./_an-object");t.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},{"./_an-object":32}],65:[function(e,t,n){"use strict";var r=e("./_object-create"),o=e("./_property-desc"),i=e("./_set-to-string-tag"),a={};e("./_hide")(a,e("./_wks")("iterator"),function(){return this}),t.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},{"./_hide":56,"./_object-create":75,"./_property-desc":87,"./_set-to-string-tag":91,"./_wks":106}],66:[function(e,t,n){"use strict";var r=e("./_library"),o=e("./_export"),i=e("./_redefine"),a=e("./_hide"),s=e("./_has"),l=e("./_iterators"),c=e("./_iter-create"),u=e("./_set-to-string-tag"),f=e("./_object-gpo"),d=e("./_wks")("iterator"),p=!([].keys&&"next"in[].keys()),v="@@iterator",h="keys",m="values",y=function(){return this};t.exports=function(e,t,n,b,g,_,w){c(n,t,b);var x,j,k,E=function(e){if(!p&&e in T)return T[e];switch(e){case h:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},O=t+" Iterator",S=g==m,A=!1,T=e.prototype,N=T[d]||T[v]||g&&T[g],C=N||E(g),L=g?S?E("entries"):C:void 0,M="Array"==t?T.entries||N:N;if(M&&(k=f(M.call(new e)),k!==Object.prototype&&(u(k,O,!0),r||s(k,d)||a(k,d,y))),S&&N&&N.name!==m&&(A=!0,C=function(){return N.call(this)}),r&&!w||!p&&!A&&T[d]||a(T,d,C),l[t]=C,l[O]=y,g)if(x={values:S?C:E(m),keys:_?C:E(h),entries:L},w)for(j in x)j in T||i(T,j,x[j]);else o(o.P+o.F*(p||A),t,x);return x}},{"./_export":51,"./_has":55,"./_hide":56,"./_iter-create":65,"./_iterators":69,"./_library":71,"./_object-gpo":82,"./_redefine":89,"./_set-to-string-tag":91,"./_wks":106}],67:[function(e,t,n){var r=e("./_wks")("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}t.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},e(i)}catch(e){}return n}},{"./_wks":106}],68:[function(e,t,n){t.exports=function(e,t){return{value:t,done:!!e}}},{}],69:[function(e,t,n){t.exports={}},{}],70:[function(e,t,n){var r=e("./_object-keys"),o=e("./_to-iobject");t.exports=function(e,t){for(var n,i=o(e),a=r(i),s=a.length,l=0;s>l;)if(i[n=a[l++]]===t)return n}},{"./_object-keys":84,"./_to-iobject":99}],71:[function(e,t,n){t.exports=!0},{}],72:[function(e,t,n){var r=e("./_uid")("meta"),o=e("./_is-object"),i=e("./_has"),a=e("./_object-dp").f,s=0,l=Object.isExtensible||function(){return!0},c=!e("./_fails")(function(){return l(Object.preventExtensions({}))}),u=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},f=function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,r)){if(!l(e))return"F";if(!t)return"E";u(e)}return e[r].i},d=function(e,t){if(!i(e,r)){if(!l(e))return!0;if(!t)return!1;u(e)}return e[r].w},p=function(e){return c&&v.NEED&&l(e)&&!i(e,r)&&u(e),e},v=t.exports={KEY:r,NEED:!1,fastKey:f,getWeak:d,onFreeze:p}},{"./_fails":52,"./_has":55,"./_is-object":63,"./_object-dp":76,"./_uid":103}],73:[function(e,t,n){var r=e("./_global"),o=e("./_task").set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,s=r.Promise,l="process"==e("./_cof")(a);t.exports=function(){var e,t,n,c=function(){var r,o;for(l&&(r=a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(l)n=function(){a.nextTick(c)};else if(i){var u=!0,f=document.createTextNode("");new i(c).observe(f,{characterData:!0}),n=function(){f.data=u=!u}}else if(s&&s.resolve){var d=s.resolve();n=function(){d.then(c)}}else n=function(){o.call(r,c)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},{"./_cof":39,"./_global":54,"./_task":96}],74:[function(e,t,n){"use strict";var r=e("./_object-keys"),o=e("./_object-gops"),i=e("./_object-pie"),a=e("./_to-object"),s=e("./_iobject"),l=Object.assign;t.exports=!l||e("./_fails")(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=l({},e)[n]||Object.keys(l({},t)).join("")!=r})?function(e,t){for(var n=a(e),l=arguments.length,c=1,u=o.f,f=i.f;l>c;)for(var d,p=s(arguments[c++]),v=u?r(p).concat(u(p)):r(p),h=v.length,m=0;h>m;)f.call(p,d=v[m++])&&(n[d]=p[d]);return n}:l},{"./_fails":52,"./_iobject":60,"./_object-gops":81,"./_object-keys":84,"./_object-pie":85,"./_to-object":101}],75:[function(e,t,n){var r=e("./_an-object"),o=e("./_object-dps"),i=e("./_enum-bug-keys"),a=e("./_shared-key")("IE_PROTO"),s=function(){},l="prototype",c=function(){var t,n=e("./_dom-create")("iframe"),r=i.length,o="<",a=">";for(n.style.display="none",e("./_html").appendChild(n),n.src="javascript:",t=n.contentWindow.document,t.open(),t.write(o+"script"+a+"document.F=Object"+o+"/script"+a),t.close(),c=t.F;r--;)delete c[l][i[r]];return c()};t.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=r(e),n=new s,s[l]=null,n[a]=e):n=c(),void 0===t?n:o(n,t)}},{"./_an-object":32,"./_dom-create":48,"./_enum-bug-keys":49,"./_html":57,"./_object-dps":77,"./_shared-key":92}],76:[function(e,t,n){var r=e("./_an-object"),o=e("./_ie8-dom-define"),i=e("./_to-primitive"),a=Object.defineProperty;n.f=e("./_descriptors")?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},{"./_an-object":32,"./_descriptors":47,"./_ie8-dom-define":58,"./_to-primitive":102}],77:[function(e,t,n){var r=e("./_object-dp"),o=e("./_an-object"),i=e("./_object-keys");t.exports=e("./_descriptors")?Object.defineProperties:function(e,t){o(e);for(var n,a=i(t),s=a.length,l=0;s>l;)r.f(e,n=a[l++],t[n]);return e}},{"./_an-object":32,"./_descriptors":47,"./_object-dp":76,"./_object-keys":84}],78:[function(e,t,n){var r=e("./_object-pie"),o=e("./_property-desc"),i=e("./_to-iobject"),a=e("./_to-primitive"),s=e("./_has"),l=e("./_ie8-dom-define"),c=Object.getOwnPropertyDescriptor;n.f=e("./_descriptors")?c:function(e,t){if(e=i(e),t=a(t,!0),l)try{return c(e,t)}catch(e){}if(s(e,t))return o(!r.f.call(e,t),e[t])}},{"./_descriptors":47,"./_has":55,"./_ie8-dom-define":58,"./_object-pie":85,"./_property-desc":87,"./_to-iobject":99,"./_to-primitive":102}],79:[function(e,t,n){var r=e("./_to-iobject"),o=e("./_object-gopn").f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return o(e)}catch(e){return a.slice()}};t.exports.f=function(e){return a&&"[object Window]"==i.call(e)?s(e):o(r(e))}},{"./_object-gopn":80,"./_to-iobject":99}],80:[function(e,t,n){var r=e("./_object-keys-internal"),o=e("./_enum-bug-keys").concat("length","prototype");n.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},{"./_enum-bug-keys":49,"./_object-keys-internal":83}],81:[function(e,t,n){n.f=Object.getOwnPropertySymbols},{}],82:[function(e,t,n){var r=e("./_has"),o=e("./_to-object"),i=e("./_shared-key")("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},{"./_has":55,"./_shared-key":92,"./_to-object":101}],83:[function(e,t,n){var r=e("./_has"),o=e("./_to-iobject"),i=e("./_array-includes")(!1),a=e("./_shared-key")("IE_PROTO");t.exports=function(e,t){var n,s=o(e),l=0,c=[];for(n in s)n!=a&&r(s,n)&&c.push(n);for(;t.length>l;)r(s,n=t[l++])&&(~i(c,n)||c.push(n));return c}},{"./_array-includes":34,"./_has":55,"./_shared-key":92,"./_to-iobject":99}],84:[function(e,t,n){var r=e("./_object-keys-internal"),o=e("./_enum-bug-keys");t.exports=Object.keys||function(e){return r(e,o)}},{"./_enum-bug-keys":49,"./_object-keys-internal":83}],85:[function(e,t,n){n.f={}.propertyIsEnumerable},{}],86:[function(e,t,n){var r=e("./_export"),o=e("./_core"),i=e("./_fails");t.exports=function(e,t){var n=(o.Object||{})[e]||Object[e],a={};a[e]=t(n),r(r.S+r.F*i(function(){n(1)}),"Object",a)}},{"./_core":43,"./_export":51,"./_fails":52}],87:[function(e,t,n){t.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},{}],88:[function(e,t,n){var r=e("./_hide");t.exports=function(e,t,n){for(var o in t)n&&e[o]?e[o]=t[o]:r(e,o,t[o]);return e}},{"./_hide":56}],89:[function(e,t,n){t.exports=e("./_hide")},{"./_hide":56}],90:[function(e,t,n){"use strict";var r=e("./_global"),o=e("./_core"),i=e("./_object-dp"),a=e("./_descriptors"),s=e("./_wks")("species");t.exports=function(e){var t="function"==typeof o[e]?o[e]:r[e];a&&t&&!t[s]&&i.f(t,s,{configurable:!0,get:function(){return this}})}},{"./_core":43,"./_descriptors":47,"./_global":54,"./_object-dp":76,"./_wks":106}],91:[function(e,t,n){var r=e("./_object-dp").f,o=e("./_has"),i=e("./_wks")("toStringTag");t.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},{"./_has":55,"./_object-dp":76,"./_wks":106}],92:[function(e,t,n){var r=e("./_shared")("keys"),o=e("./_uid");t.exports=function(e){return r[e]||(r[e]=o(e))}},{"./_shared":93,"./_uid":103}],93:[function(e,t,n){var r=e("./_global"),o="__core-js_shared__",i=r[o]||(r[o]={});t.exports=function(e){return i[e]||(i[e]={})}},{"./_global":54}],94:[function(e,t,n){var r=e("./_an-object"),o=e("./_a-function"),i=e("./_wks")("species");t.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||void 0==(n=r(a)[i])?t:o(n)}},{"./_a-function":29,"./_an-object":32,"./_wks":106}],95:[function(e,t,n){var r=e("./_to-integer"),o=e("./_defined");t.exports=function(e){return function(t,n){var i,a,s=String(o(t)),l=r(n),c=s.length;return l<0||l>=c?e?"":void 0:(i=s.charCodeAt(l),i<55296||i>56319||l+1===c||(a=s.charCodeAt(l+1))<56320||a>57343?e?s.charAt(l):i:e?s.slice(l,l+2):(i-55296<<10)+(a-56320)+65536)}}},{"./_defined":46,"./_to-integer":98}],96:[function(e,t,n){var r,o,i,a=e("./_ctx"),s=e("./_invoke"),l=e("./_html"),c=e("./_dom-create"),u=e("./_global"),f=u.process,d=u.setImmediate,p=u.clearImmediate,v=u.MessageChannel,h=0,m={},y="onreadystatechange",b=function(){var e=+this;if(m.hasOwnProperty(e)){var t=m[e];delete m[e],t()}},g=function(e){b.call(e.data)};d&&p||(d=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return m[++h]=function(){s("function"==typeof e?e:Function(e),t)},r(h),h},p=function(e){delete m[e]},"process"==e("./_cof")(f)?r=function(e){f.nextTick(a(b,e,1))}:v?(o=new v,i=o.port2,o.port1.onmessage=g,r=a(i.postMessage,i,1)):u.addEventListener&&"function"==typeof postMessage&&!u.importScripts?(r=function(e){u.postMessage(e+"","*")},u.addEventListener("message",g,!1)):r=y in c("script")?function(e){l.appendChild(c("script"))[y]=function(){l.removeChild(this),b.call(e)}}:function(e){setTimeout(a(b,e,1),0)}),t.exports={set:d,clear:p}},{"./_cof":39,"./_ctx":45,"./_dom-create":48,"./_global":54,"./_html":57,"./_invoke":59}],97:[function(e,t,n){var r=e("./_to-integer"),o=Math.max,i=Math.min;t.exports=function(e,t){return e=r(e),e<0?o(e+t,0):i(e,t)}},{"./_to-integer":98}],98:[function(e,t,n){var r=Math.ceil,o=Math.floor;t.exports=function(e){return isNaN(e=+e)?0:(e>0?o:r)(e)}},{}],99:[function(e,t,n){var r=e("./_iobject"),o=e("./_defined");t.exports=function(e){return r(o(e))}},{"./_defined":46,"./_iobject":60}],100:[function(e,t,n){var r=e("./_to-integer"),o=Math.min;t.exports=function(e){return e>0?o(r(e),9007199254740991):0}},{"./_to-integer":98}],101:[function(e,t,n){var r=e("./_defined");t.exports=function(e){return Object(r(e))}},{"./_defined":46}],102:[function(e,t,n){var r=e("./_is-object");t.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},{"./_is-object":63}],103:[function(e,t,n){var r=0,o=Math.random();t.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++r+o).toString(36))}},{}],104:[function(e,t,n){var r=e("./_global"),o=e("./_core"),i=e("./_library"),a=e("./_wks-ext"),s=e("./_object-dp").f;t.exports=function(e){var t=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},{"./_core":43,"./_global":54,"./_library":71,"./_object-dp":76,"./_wks-ext":105}],105:[function(e,t,n){n.f=e("./_wks")},{"./_wks":106}],106:[function(e,t,n){var r=e("./_shared")("wks"),o=e("./_uid"),i=e("./_global").Symbol,a="function"==typeof i,s=t.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))};s.store=r},{"./_global":54,"./_shared":93,"./_uid":103}],107:[function(e,t,n){var r=e("./_classof"),o=e("./_wks")("iterator"),i=e("./_iterators");t.exports=e("./_core").getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||i[r(e)]}},{"./_classof":38,"./_core":43,"./_iterators":69,"./_wks":106}],108:[function(e,t,n){var r=e("./_an-object"),o=e("./core.get-iterator-method");t.exports=e("./_core").getIterator=function(e){var t=o(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return r(t.call(e))}},{"./_an-object":32,"./_core":43,"./core.get-iterator-method":107}],109:[function(e,t,n){var r=e("./_classof"),o=e("./_wks")("iterator"),i=e("./_iterators");t.exports=e("./_core").isIterable=function(e){var t=Object(e);return void 0!==t[o]||"@@iterator"in t||i.hasOwnProperty(r(t))}},{"./_classof":38,"./_core":43,"./_iterators":69,"./_wks":106}],110:[function(e,t,n){"use strict";var r=e("./_ctx"),o=e("./_export"),i=e("./_to-object"),a=e("./_iter-call"),s=e("./_is-array-iter"),l=e("./_to-length"),c=e("./_create-property"),u=e("./core.get-iterator-method");o(o.S+o.F*!e("./_iter-detect")(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,o,f,d=i(e),p="function"==typeof this?this:Array,v=arguments.length,h=v>1?arguments[1]:void 0,m=void 0!==h,y=0,b=u(d);if(m&&(h=r(h,v>2?arguments[2]:void 0,2)),void 0==b||p==Array&&s(b))for(t=l(d.length),n=new p(t);t>y;y++)c(n,y,m?h(d[y],y):d[y]);else for(f=b.call(d), n=new p;!(o=f.next()).done;y++)c(n,y,m?a(f,h,[o.value,y],!0):o.value);return n.length=y,n}})},{"./_create-property":44,"./_ctx":45,"./_export":51,"./_is-array-iter":61,"./_iter-call":64,"./_iter-detect":67,"./_to-length":100,"./_to-object":101,"./core.get-iterator-method":107}],111:[function(e,t,n){"use strict";var r=e("./_add-to-unscopables"),o=e("./_iter-step"),i=e("./_iterators"),a=e("./_to-iobject");t.exports=e("./_iter-define")(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,o(1)):"keys"==t?o(0,n):"values"==t?o(0,e[n]):o(0,[n,e[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},{"./_add-to-unscopables":30,"./_iter-define":66,"./_iter-step":68,"./_iterators":69,"./_to-iobject":99}],112:[function(e,t,n){"use strict";var r=e("./_collection-strong");t.exports=e("./_collection")("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(this,e);return t&&t.v},set:function(e,t){return r.def(this,0===e?0:e,t)}},r,!0)},{"./_collection":42,"./_collection-strong":40}],113:[function(e,t,n){var r=e("./_export");r(r.S+r.F,"Object",{assign:e("./_object-assign")})},{"./_export":51,"./_object-assign":74}],114:[function(e,t,n){var r=e("./_export");r(r.S+r.F*!e("./_descriptors"),"Object",{defineProperty:e("./_object-dp").f})},{"./_descriptors":47,"./_export":51,"./_object-dp":76}],115:[function(e,t,n){var r=e("./_to-object"),o=e("./_object-keys");e("./_object-sap")("keys",function(){return function(e){return o(r(e))}})},{"./_object-keys":84,"./_object-sap":86,"./_to-object":101}],116:[function(e,t,n){},{}],117:[function(e,t,n){"use strict";var r,o,i,a=e("./_library"),s=e("./_global"),l=e("./_ctx"),c=e("./_classof"),u=e("./_export"),f=e("./_is-object"),d=e("./_a-function"),p=e("./_an-instance"),v=e("./_for-of"),h=e("./_species-constructor"),m=e("./_task").set,y=e("./_microtask")(),b="Promise",g=s.TypeError,_=s.process,w=s[b],_=s.process,x="process"==c(_),j=function(){},k=!!function(){try{var t=w.resolve(1),n=(t.constructor={})[e("./_wks")("species")]=function(e){e(j,j)};return(x||"function"==typeof PromiseRejectionEvent)&&t.then(j)instanceof n}catch(e){}}(),E=function(e,t){return e===t||e===w&&t===i},O=function(e){var t;return!(!f(e)||"function"!=typeof(t=e.then))&&t},S=function(e){return E(w,e)?new A(e):new o(e)},A=o=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw g("Bad Promise constructor");t=e,n=r}),this.resolve=d(t),this.reject=d(n)},T=function(e){try{e()}catch(e){return{error:e}}},N=function(e,t){if(!e._n){e._n=!0;var n=e._c;y(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,l=t.reject,c=t.domain;try{a?(o||(2==e._h&&M(e),e._h=1),a===!0?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?l(g("Promise-chain cycle")):(i=O(n))?i.call(n,s,l):s(n)):l(r)}catch(e){l(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&C(e)})}},C=function(e){m.call(s,function(){var t,n,r,o=e._v;if(L(e)&&(t=T(function(){x?_.emit("unhandledRejection",o,e):(n=s.onunhandledrejection)?n({promise:e,reason:o}):(r=s.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=x||L(e)?2:1),e._a=void 0,t)throw t.error})},L=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!L(t.promise))return!1;return!0},M=function(e){m.call(s,function(){var t;x?_.emit("rejectionHandled",e):(t=s.onrejectionhandled)&&t({promise:e,reason:e._v})})},P=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),N(t,!0))},F=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw g("Promise can't be resolved itself");(t=O(e))?y(function(){var r={_w:n,_d:!1};try{t.call(e,l(F,r,1),l(P,r,1))}catch(e){P.call(r,e)}}):(n._v=e,n._s=1,N(n,!1))}catch(e){P.call({_w:n,_d:!1},e)}}};k||(w=function(e){p(this,w,b,"_h"),d(e),r.call(this);try{e(l(F,this,1),l(P,this,1))}catch(e){P.call(this,e)}},r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=e("./_redefine-all")(w.prototype,{then:function(e,t){var n=S(h(this,w));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=x?_.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&N(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),A=function(){var e=new r;this.promise=e,this.resolve=l(F,e,1),this.reject=l(P,e,1)}),u(u.G+u.W+u.F*!k,{Promise:w}),e("./_set-to-string-tag")(w,b),e("./_set-species")(b),i=e("./_core")[b],u(u.S+u.F*!k,b,{reject:function(e){var t=S(this),n=t.reject;return n(e),t.promise}}),u(u.S+u.F*(a||!k),b,{resolve:function(e){if(e instanceof w&&E(e.constructor,this))return e;var t=S(this),n=t.resolve;return n(e),t.promise}}),u(u.S+u.F*!(k&&e("./_iter-detect")(function(e){w.all(e).catch(j)})),b,{all:function(e){var t=this,n=S(t),r=n.resolve,o=n.reject,i=T(function(){var n=[],i=0,a=1;v(e,!1,function(e){var s=i++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=S(t),r=n.reject,o=T(function(){v(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}})},{"./_a-function":29,"./_an-instance":31,"./_classof":38,"./_core":43,"./_ctx":45,"./_export":51,"./_for-of":53,"./_global":54,"./_is-object":63,"./_iter-detect":67,"./_library":71,"./_microtask":73,"./_redefine-all":88,"./_set-species":90,"./_set-to-string-tag":91,"./_species-constructor":94,"./_task":96,"./_wks":106}],118:[function(e,t,n){"use strict";var r=e("./_string-at")(!0);e("./_iter-define")(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},{"./_iter-define":66,"./_string-at":95}],119:[function(e,t,n){"use strict";var r=e("./_global"),o=e("./_has"),i=e("./_descriptors"),a=e("./_export"),s=e("./_redefine"),l=e("./_meta").KEY,c=e("./_fails"),u=e("./_shared"),f=e("./_set-to-string-tag"),d=e("./_uid"),p=e("./_wks"),v=e("./_wks-ext"),h=e("./_wks-define"),m=e("./_keyof"),y=e("./_enum-keys"),b=e("./_is-array"),g=e("./_an-object"),_=e("./_to-iobject"),w=e("./_to-primitive"),x=e("./_property-desc"),j=e("./_object-create"),k=e("./_object-gopn-ext"),E=e("./_object-gopd"),O=e("./_object-dp"),S=e("./_object-keys"),A=E.f,T=O.f,N=k.f,C=r.Symbol,L=r.JSON,M=L&&L.stringify,P="prototype",F=p("_hidden"),D=p("toPrimitive"),I={}.propertyIsEnumerable,R=u("symbol-registry"),$=u("symbols"),q=u("op-symbols"),U=Object[P],B="function"==typeof C,H=r.QObject,W=!H||!H[P]||!H[P].findChild,G=i&&c(function(){return 7!=j(T({},"a",{get:function(){return T(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=A(U,t);r&&delete U[t],T(e,t,n),r&&e!==U&&T(U,t,r)}:T,z=function(e){var t=$[e]=j(C[P]);return t._k=e,t},J=B&&"symbol"==typeof C.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof C},Y=function(e,t,n){return e===U&&Y(q,t,n),g(e),t=w(t,!0),g(n),o($,t)?(n.enumerable?(o(e,F)&&e[F][t]&&(e[F][t]=!1),n=j(n,{enumerable:x(0,!1)})):(o(e,F)||T(e,F,x(1,{})),e[F][t]=!0),G(e,t,n)):T(e,t,n)},X=function(e,t){g(e);for(var n,r=y(t=_(t)),o=0,i=r.length;i>o;)Y(e,n=r[o++],t[n]);return e},K=function(e,t){return void 0===t?j(e):X(j(e),t)},V=function(e){var t=I.call(this,e=w(e,!0));return!(this===U&&o($,e)&&!o(q,e))&&(!(t||!o(this,e)||!o($,e)||o(this,F)&&this[F][e])||t)},Q=function(e,t){if(e=_(e),t=w(t,!0),e!==U||!o($,t)||o(q,t)){var n=A(e,t);return!n||!o($,t)||o(e,F)&&e[F][t]||(n.enumerable=!0),n}},Z=function(e){for(var t,n=N(_(e)),r=[],i=0;n.length>i;)o($,t=n[i++])||t==F||t==l||r.push(t);return r},ee=function(e){for(var t,n=e===U,r=N(n?q:_(e)),i=[],a=0;r.length>a;)!o($,t=r[a++])||n&&!o(U,t)||i.push($[t]);return i};B||(C=function(){if(this instanceof C)throw TypeError("Symbol is not a constructor!");var e=d(arguments.length>0?arguments[0]:void 0),t=function(n){this===U&&t.call(q,n),o(this,F)&&o(this[F],e)&&(this[F][e]=!1),G(this,e,x(1,n))};return i&&W&&G(U,e,{configurable:!0,set:t}),z(e)},s(C[P],"toString",function(){return this._k}),E.f=Q,O.f=Y,e("./_object-gopn").f=k.f=Z,e("./_object-pie").f=V,e("./_object-gops").f=ee,i&&!e("./_library")&&s(U,"propertyIsEnumerable",V,!0),v.f=function(e){return z(p(e))}),a(a.G+a.W+a.F*!B,{Symbol:C});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ne=0;te.length>ne;)p(te[ne++]);for(var te=S(p.store),ne=0;te.length>ne;)h(te[ne++]);a(a.S+a.F*!B,"Symbol",{for:function(e){return o(R,e+="")?R[e]:R[e]=C(e)},keyFor:function(e){if(J(e))return m(R,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){W=!0},useSimple:function(){W=!1}}),a(a.S+a.F*!B,"Object",{create:K,defineProperty:Y,defineProperties:X,getOwnPropertyDescriptor:Q,getOwnPropertyNames:Z,getOwnPropertySymbols:ee}),L&&a(a.S+a.F*(!B||c(function(){var e=C();return"[null]"!=M([e])||"{}"!=M({a:e})||"{}"!=M(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!J(e)){for(var t,n,r=[e],o=1;arguments.length>o;)r.push(arguments[o++]);return t=r[1],"function"==typeof t&&(n=t),!n&&b(t)||(t=function(e,t){if(n&&(t=n.call(this,e,t)),!J(t))return t}),r[1]=t,M.apply(L,r)}}}),C[P][D]||e("./_hide")(C[P],D,C[P].valueOf),f(C,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},{"./_an-object":32,"./_descriptors":47,"./_enum-keys":50,"./_export":51,"./_fails":52,"./_global":54,"./_has":55,"./_hide":56,"./_is-array":62,"./_keyof":70,"./_library":71,"./_meta":72,"./_object-create":75,"./_object-dp":76,"./_object-gopd":78,"./_object-gopn":80,"./_object-gopn-ext":79,"./_object-gops":81,"./_object-keys":84,"./_object-pie":85,"./_property-desc":87,"./_redefine":89,"./_set-to-string-tag":91,"./_shared":93,"./_to-iobject":99,"./_to-primitive":102,"./_uid":103,"./_wks":106,"./_wks-define":104,"./_wks-ext":105}],120:[function(e,t,n){var r=e("./_export");r(r.P+r.R,"Map",{toJSON:e("./_collection-to-json")("Map")})},{"./_collection-to-json":41,"./_export":51}],121:[function(e,t,n){e("./_wks-define")("asyncIterator")},{"./_wks-define":104}],122:[function(e,t,n){e("./_wks-define")("observable")},{"./_wks-define":104}],123:[function(e,t,n){e("./es6.array.iterator");for(var r=e("./_global"),o=e("./_hide"),i=e("./_iterators"),a=e("./_wks")("toStringTag"),s=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],l=0;l<5;l++){var c=s[l],u=r[c],f=u&&u.prototype;f&&!f[a]&&o(f,a,c),i[c]=i.Array}},{"./_global":54,"./_hide":56,"./_iterators":69,"./_wks":106,"./es6.array.iterator":111}],124:[function(e,t,n){t.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="dist/",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(57),i=r(o),a=n(53),s=r(a),l=n(56),c=r(l),u=n(48),f=r(u),d=n(54),p=r(d),v=n(55),h=r(v),m=function(){function e(){(0,p.default)(this,e);var t={extension:".lang",location:"assets/lang/",langs:["en-US"],locale:"en-US",preloaded:{}},n=this;n.init=function(e){return n.config=(0,f.default)({},t,e),n.langs=(0,f.default)({},n.config.preloaded),n.locale=n.config.locale||n.config.langs[0],n.setCurrent(n.locale)}}return(0,h.default)(e,[{key:"getValue",value:function(e){return this.current&&this.current[e]||e}},{key:"makeSafe",value:function(e){var t={"{":"\\{","}":"\\}","|":"\\|"};return e=e.replace(/\{|\}|\|/g,function(e){return t[e]}),new RegExp(e,"g")}},{key:"put",value:function(e,t){return this.current[e]=t}},{key:"get",value:function(e,t){var n=this,r=this.getValue(e),o=r.match(/\{[^\}]+?\}/g),i=void 0;if(t&&o)if("object"===("undefined"==typeof t?"undefined":(0,c.default)(t)))for(var a=0;a0&&void 0!==arguments[0]?arguments[0]:"en-US";return i.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.loadLang(t);case 2:return this.locale=t,this.current=this.langs[t],e.abrupt("return",this.current);case 5:case"end":return e.stop()}},e,this)}));return e}()},{key:"getLangs",get:function(){return this.config.langs}}]),e}();t.default=new m},function(e,t,n){var r=n(28)("wks"),o=n(21),i=n(2).Symbol,a="function"==typeof i,s=e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))};s.store=r},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){var n=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(e,t,n){e.exports=!n(12)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,n){var r=n(6),o=n(35),i=n(30),a=Object.defineProperty;t.f=n(4)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(13);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(5),o=n(19);e.exports=n(4)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(36),o=n(23);e.exports=function(e){return r(o(e))}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(2),o=n(3),i=n(16),a=n(8),s="prototype",l=function(e,t,n){var c,u,f,d=e&l.F,p=e&l.G,v=e&l.S,h=e&l.P,m=e&l.B,y=e&l.W,b=p?o:o[t]||(o[t]={}),g=b[s],_=p?r:v?r[t]:(r[t]||{})[s];p&&(n=t);for(c in n)u=!d&&_&&void 0!==_[c],u&&c in b||(f=u?_[c]:n[c],b[c]=p&&"function"!=typeof _[c]?n[c]:m&&u?i(f,r):y&&_[c]==f?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[s]=e[s],t}(f):h&&"function"==typeof f?i(Function.call,f):f,h&&((b.virtual||(b.virtual={}))[c]=f,e&l.R&&g&&!g[c]&&a(g,c,f)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){e.exports={}},function(e,t,n){var r=n(40),o=n(25);e.exports=Object.keys||function(e){return r(e,o)}},function(e,t,n){var r=n(22);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=!0},function(e,t){t.f={}.propertyIsEnumerable},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(5).f,o=n(7),i=n(1)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var r=n(13),o=n(2).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){var r=n(28)("keys"),o=n(21);e.exports=function(e){return r[e]||(r[e]=o(e))}},function(e,t,n){var r=n(2),o="__core-js_shared__",i=r[o]||(r[o]={});e.exports=function(e){return i[e]||(i[e]={})}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(13);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var r=n(2),o=n(3),i=n(17),a=n(32),s=n(5).f;e.exports=function(e){var t=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},function(e,t,n){t.f=n(1)},function(e,t,n){var r=n(10),o=n(1)("toStringTag"),i="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(e){}};e.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),o))?n:i?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},function(e,t,n){e.exports=n(2).document&&document.documentElement},function(e,t,n){e.exports=!n(4)&&!n(12)(function(){return 7!=Object.defineProperty(n(24)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var r=n(10);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){"use strict";var r=n(17),o=n(11),i=n(41),a=n(8),s=n(7),l=n(14),c=n(72),u=n(20),f=n(82),d=n(1)("iterator"),p=!([].keys&&"next"in[].keys()),v="@@iterator",h="keys",m="values",y=function(){return this};e.exports=function(e,t,n,b,g,_,w){c(n,t,b);var x,j,k,E=function(e){if(!p&&e in T)return T[e];switch(e){case h:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},O=t+" Iterator",S=g==m,A=!1,T=e.prototype,N=T[d]||T[v]||g&&T[g],C=N||E(g),L=g?S?E("entries"):C:void 0,M="Array"==t?T.entries||N:N;if(M&&(k=f(M.call(new e)),k!==Object.prototype&&(u(k,O,!0),r||s(k,d)||a(k,d,y))),S&&N&&N.name!==m&&(A=!0,C=function(){return N.call(this)}),r&&!w||!p&&!A&&T[d]||a(T,d,C),l[t]=C,l[O]=y,g)if(x={values:S?C:E(m),keys:_?C:E(h),entries:L},w)for(j in x)j in T||i(T,j,x[j]);else o(o.P+o.F*(p||A),t,x);return x}},function(e,t,n){var r=n(6),o=n(79),i=n(25),a=n(27)("IE_PROTO"),s=function(){},l="prototype",c=function(){var e,t=n(24)("iframe"),r=i.length,o="<",a=">";for(t.style.display="none",n(34).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(o+"script"+a+"document.F=Object"+o+"/script"+a),e.close(),c=e.F;r--;)delete c[l][i[r]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=r(e),n=new s,s[l]=null,n[a]=e):n=c(),void 0===t?n:o(n,t)}},function(e,t,n){var r=n(40),o=n(25).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},function(e,t,n){var r=n(7),o=n(9),i=n(65)(!1),a=n(27)("IE_PROTO");e.exports=function(e,t){var n,s=o(e),l=0,c=[];for(n in s)n!=a&&r(s,n)&&c.push(n);for(;t.length>l;)r(s,n=t[l++])&&(~i(c,n)||c.push(n));return c}},function(e,t,n){e.exports=n(8)},function(e,t,n){var r,o,i,a=n(16),s=n(68),l=n(34),c=n(24),u=n(2),f=u.process,d=u.setImmediate,p=u.clearImmediate,v=u.MessageChannel,h=0,m={},y="onreadystatechange",b=function(){var e=+this;if(m.hasOwnProperty(e)){var t=m[e];delete m[e],t()}},g=function(e){b.call(e.data)};d&&p||(d=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return m[++h]=function(){s("function"==typeof e?e:Function(e),t)},r(h),h},p=function(e){delete m[e]},"process"==n(10)(f)?r=function(e){f.nextTick(a(b,e,1))}:v?(o=new v,i=o.port2,o.port1.onmessage=g,r=a(i.postMessage,i,1)):u.addEventListener&&"function"==typeof postMessage&&!u.importScripts?(r=function(e){u.postMessage(e+"","*")},u.addEventListener("message",g,!1)):r=y in c("script")?function(e){l.appendChild(c("script"))[y]=function(){l.removeChild(this),b.call(e)}}:function(e){setTimeout(a(b,e,1),0)}),e.exports={set:d,clear:p}},function(e,t,n){var r=n(29),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){var r=n(23);e.exports=function(e){return Object(r(e))}},function(e,t){},function(e,t,n){"use strict";var r=n(86)(!0);n(37)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){n(89);for(var r=n(2),o=n(8),i=n(14),a=n(1)("toStringTag"),s=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],l=0;l<5;l++){var c=s[l],u=r[c],f=u&&u.prototype;f&&!f[a]&&o(f,a,c),i[c]=i.Array}},function(e,t,n){e.exports={default:n(58),__esModule:!0}},function(e,t,n){e.exports={default:n(59),__esModule:!0}},function(e,t,n){e.exports={default:n(60),__esModule:!0}},function(e,t,n){e.exports={default:n(61),__esModule:!0}},function(e,t,n){e.exports={default:n(62),__esModule:!0}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var o=n(50),i=r(o);t.default=function(e){return function(){var t=e.apply(this,arguments);return new i.default(function(e,n){function r(o,a){try{var s=t[o](a),l=s.value}catch(e){return void n(e)}return s.done?void e(l):i.default.resolve(l).then(function(e){return r("next",e)},function(e){return r("throw",e)})}return r("next")})}}},function(e,t){"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var o=n(49),i=r(o);t.default=function(){function e(e,t){for(var n=0;nu;)if(s=l[u++],s!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}}},function(e,t,n){var r=n(15),o=n(26),i=n(18);e.exports=function(e){var t=r(e),n=o.f;if(n)for(var a,s=n(e),l=i.f,c=0;s.length>c;)l.call(e,a=s[c++])&&t.push(a);return t}},function(e,t,n){var r=n(16),o=n(71),i=n(69),a=n(6),s=n(43),l=n(88),c={},u={},t=e.exports=function(e,t,n,f,d){var p,v,h,m,y=d?function(){return e}:l(e),b=r(n,f,t?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(i(y)){for(p=s(e.length);p>g;g++)if(m=t?b(a(v=e[g])[0],v[1]):b(e[g]),m===c||m===u)return m}else for(h=y.call(e);!(v=h.next()).done;)if(m=o(h,b,v.value,t),m===c||m===u)return m};t.BREAK=c,t.RETURN=u},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){var r=n(14),o=n(1)("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},function(e,t,n){var r=n(10);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(6);e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},function(e,t,n){"use strict";var r=n(38),o=n(19),i=n(20),a={};n(8)(a,n(1)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},function(e,t,n){var r=n(1)("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},e(i)}catch(e){}return n}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){var r=n(15),o=n(9);e.exports=function(e,t){for(var n,i=o(e),a=r(i),s=a.length,l=0;s>l;)if(i[n=a[l++]]===t)return n}},function(e,t,n){var r=n(21)("meta"),o=n(13),i=n(7),a=n(5).f,s=0,l=Object.isExtensible||function(){return!0},c=!n(12)(function(){return l(Object.preventExtensions({}))}),u=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},f=function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,r)){if(!l(e))return"F";if(!t)return"E";u(e)}return e[r].i},d=function(e,t){if(!i(e,r)){if(!l(e))return!0;if(!t)return!1;u(e)}return e[r].w},p=function(e){return c&&v.NEED&&l(e)&&!i(e,r)&&u(e),e},v=e.exports={KEY:r,NEED:!1,fastKey:f,getWeak:d,onFreeze:p}},function(e,t,n){var r=n(2),o=n(42).set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,s=r.Promise,l="process"==n(10)(a);e.exports=function(){var e,t,n,c=function(){var r,o;for(l&&(r=a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(l)n=function(){a.nextTick(c)};else if(i){var u=!0,f=document.createTextNode("");new i(c).observe(f,{characterData:!0}),n=function(){f.data=u=!u}}else if(s&&s.resolve){var d=s.resolve();n=function(){d.then(c)}}else n=function(){o.call(r,c)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},function(e,t,n){"use strict";var r=n(15),o=n(26),i=n(18),a=n(44),s=n(36),l=Object.assign;e.exports=!l||n(12)(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=l({},e)[n]||Object.keys(l({},t)).join("")!=r})?function(e,t){for(var n=a(e),l=arguments.length,c=1,u=o.f,f=i.f;l>c;)for(var d,p=s(arguments[c++]),v=u?r(p).concat(u(p)):r(p),h=v.length,m=0;h>m;)f.call(p,d=v[m++])&&(n[d]=p[d]);return n}:l},function(e,t,n){var r=n(5),o=n(6),i=n(15);e.exports=n(4)?Object.defineProperties:function(e,t){o(e);for(var n,a=i(t),s=a.length,l=0;s>l;)r.f(e,n=a[l++],t[n]);return e}},function(e,t,n){var r=n(18),o=n(19),i=n(9),a=n(30),s=n(7),l=n(35),c=Object.getOwnPropertyDescriptor;t.f=n(4)?c:function(e,t){if(e=i(e),t=a(t,!0),l)try{return c(e,t)}catch(e){}if(s(e,t))return o(!r.f.call(e,t),e[t])}},function(e,t,n){var r=n(9),o=n(39).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return o(e)}catch(e){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==i.call(e)?s(e):o(r(e))}},function(e,t,n){var r=n(7),o=n(44),i=n(27)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},function(e,t,n){var r=n(8);e.exports=function(e,t,n){for(var o in t)n&&e[o]?e[o]=t[o]:r(e,o,t[o]);return e}},function(e,t,n){"use strict";var r=n(2),o=n(3),i=n(5),a=n(4),s=n(1)("species");e.exports=function(e){var t="function"==typeof o[e]?o[e]:r[e];a&&t&&!t[s]&&i.f(t,s,{configurable:!0,get:function(){return this}})}},function(e,t,n){var r=n(6),o=n(22),i=n(1)("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||void 0==(n=r(a)[i])?t:o(n)}},function(e,t,n){var r=n(29),o=n(23);e.exports=function(e){return function(t,n){var i,a,s=String(o(t)),l=r(n),c=s.length;return l<0||l>=c?e?"":void 0:(i=s.charCodeAt(l),i<55296||i>56319||l+1===c||(a=s.charCodeAt(l+1))<56320||a>57343?e?s.charAt(l):i:e?s.slice(l,l+2):(i-55296<<10)+(a-56320)+65536)}}},function(e,t,n){var r=n(29),o=Math.max,i=Math.min;e.exports=function(e,t){return e=r(e),e<0?o(e+t,0):i(e,t)}},function(e,t,n){var r=n(33),o=n(1)("iterator"),i=n(14);e.exports=n(3).getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||i[r(e)]}},function(e,t,n){"use strict";var r=n(63),o=n(74),i=n(14),a=n(9);e.exports=n(37)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,o(1)):"keys"==t?o(0,n):"values"==t?o(0,e[n]):o(0,[n,e[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},function(e,t,n){var r=n(11);r(r.S+r.F,"Object",{assign:n(78)})},function(e,t,n){var r=n(11);r(r.S+r.F*!n(4),"Object",{defineProperty:n(5).f})},function(e,t,n){"use strict";var r,o,i,a=n(17),s=n(2),l=n(16),c=n(33),u=n(11),f=n(13),d=n(22),p=n(64),v=n(67),h=n(85),m=n(42).set,y=n(77)(),b="Promise",g=s.TypeError,_=s.process,w=s[b],_=s.process,x="process"==c(_),j=function(){},k=!!function(){try{var e=w.resolve(1),t=(e.constructor={})[n(1)("species")]=function(e){e(j,j)};return(x||"function"==typeof PromiseRejectionEvent)&&e.then(j)instanceof t}catch(e){}}(),E=function(e,t){return e===t||e===w&&t===i},O=function(e){var t;return!(!f(e)||"function"!=typeof(t=e.then))&&t},S=function(e){return E(w,e)?new A(e):new o(e)},A=o=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw g("Bad Promise constructor");t=e,n=r}),this.resolve=d(t),this.reject=d(n)},T=function(e){try{e()}catch(e){return{error:e}}},N=function(e,t){if(!e._n){e._n=!0;var n=e._c;y(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,l=t.reject,c=t.domain;try{a?(o||(2==e._h&&M(e),e._h=1),a===!0?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?l(g("Promise-chain cycle")):(i=O(n))?i.call(n,s,l):s(n)):l(r)}catch(e){l(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&C(e)})}},C=function(e){m.call(s,function(){var t,n,r,o=e._v;if(L(e)&&(t=T(function(){x?_.emit("unhandledRejection",o,e):(n=s.onunhandledrejection)?n({promise:e,reason:o}):(r=s.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=x||L(e)?2:1),e._a=void 0,t)throw t.error})},L=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!L(t.promise))return!1;return!0},M=function(e){m.call(s,function(){var t;x?_.emit("rejectionHandled",e):(t=s.onrejectionhandled)&&t({ promise:e,reason:e._v})})},P=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),N(t,!0))},F=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw g("Promise can't be resolved itself");(t=O(e))?y(function(){var r={_w:n,_d:!1};try{t.call(e,l(F,r,1),l(P,r,1))}catch(e){P.call(r,e)}}):(n._v=e,n._s=1,N(n,!1))}catch(e){P.call({_w:n,_d:!1},e)}}};k||(w=function(e){p(this,w,b,"_h"),d(e),r.call(this);try{e(l(F,this,1),l(P,this,1))}catch(e){P.call(this,e)}},r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(83)(w.prototype,{then:function(e,t){var n=S(h(this,w));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=x?_.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&N(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),A=function(){var e=new r;this.promise=e,this.resolve=l(F,e,1),this.reject=l(P,e,1)}),u(u.G+u.W+u.F*!k,{Promise:w}),n(20)(w,b),n(84)(b),i=n(3)[b],u(u.S+u.F*!k,b,{reject:function(e){var t=S(this),n=t.reject;return n(e),t.promise}}),u(u.S+u.F*(a||!k),b,{resolve:function(e){if(e instanceof w&&E(e.constructor,this))return e;var t=S(this),n=t.resolve;return n(e),t.promise}}),u(u.S+u.F*!(k&&n(73)(function(e){w.all(e).catch(j)})),b,{all:function(e){var t=this,n=S(t),r=n.resolve,o=n.reject,i=T(function(){var n=[],i=0,a=1;v(e,!1,function(e){var s=i++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=S(t),r=n.reject,o=T(function(){v(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}})},function(e,t,n){"use strict";var r=n(2),o=n(7),i=n(4),a=n(11),s=n(41),l=n(76).KEY,c=n(12),u=n(28),f=n(20),d=n(21),p=n(1),v=n(32),h=n(31),m=n(75),y=n(66),b=n(70),g=n(6),_=n(9),w=n(30),x=n(19),j=n(38),k=n(81),E=n(80),O=n(5),S=n(15),A=E.f,T=O.f,N=k.f,C=r.Symbol,L=r.JSON,M=L&&L.stringify,P="prototype",F=p("_hidden"),D=p("toPrimitive"),I={}.propertyIsEnumerable,R=u("symbol-registry"),$=u("symbols"),q=u("op-symbols"),U=Object[P],B="function"==typeof C,H=r.QObject,W=!H||!H[P]||!H[P].findChild,G=i&&c(function(){return 7!=j(T({},"a",{get:function(){return T(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=A(U,t);r&&delete U[t],T(e,t,n),r&&e!==U&&T(U,t,r)}:T,z=function(e){var t=$[e]=j(C[P]);return t._k=e,t},J=B&&"symbol"==typeof C.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof C},Y=function(e,t,n){return e===U&&Y(q,t,n),g(e),t=w(t,!0),g(n),o($,t)?(n.enumerable?(o(e,F)&&e[F][t]&&(e[F][t]=!1),n=j(n,{enumerable:x(0,!1)})):(o(e,F)||T(e,F,x(1,{})),e[F][t]=!0),G(e,t,n)):T(e,t,n)},X=function(e,t){g(e);for(var n,r=y(t=_(t)),o=0,i=r.length;i>o;)Y(e,n=r[o++],t[n]);return e},K=function(e,t){return void 0===t?j(e):X(j(e),t)},V=function(e){var t=I.call(this,e=w(e,!0));return!(this===U&&o($,e)&&!o(q,e))&&(!(t||!o(this,e)||!o($,e)||o(this,F)&&this[F][e])||t)},Q=function(e,t){if(e=_(e),t=w(t,!0),e!==U||!o($,t)||o(q,t)){var n=A(e,t);return!n||!o($,t)||o(e,F)&&e[F][t]||(n.enumerable=!0),n}},Z=function(e){for(var t,n=N(_(e)),r=[],i=0;n.length>i;)o($,t=n[i++])||t==F||t==l||r.push(t);return r},ee=function(e){for(var t,n=e===U,r=N(n?q:_(e)),i=[],a=0;r.length>a;)!o($,t=r[a++])||n&&!o(U,t)||i.push($[t]);return i};B||(C=function(){if(this instanceof C)throw TypeError("Symbol is not a constructor!");var e=d(arguments.length>0?arguments[0]:void 0),t=function(n){this===U&&t.call(q,n),o(this,F)&&o(this[F],e)&&(this[F][e]=!1),G(this,e,x(1,n))};return i&&W&&G(U,e,{configurable:!0,set:t}),z(e)},s(C[P],"toString",function(){return this._k}),E.f=Q,O.f=Y,n(39).f=k.f=Z,n(18).f=V,n(26).f=ee,i&&!n(17)&&s(U,"propertyIsEnumerable",V,!0),v.f=function(e){return z(p(e))}),a(a.G+a.W+a.F*!B,{Symbol:C});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ne=0;te.length>ne;)p(te[ne++]);for(var te=S(p.store),ne=0;te.length>ne;)h(te[ne++]);a(a.S+a.F*!B,"Symbol",{for:function(e){return o(R,e+="")?R[e]:R[e]=C(e)},keyFor:function(e){if(J(e))return m(R,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){W=!0},useSimple:function(){W=!1}}),a(a.S+a.F*!B,"Object",{create:K,defineProperty:Y,defineProperties:X,getOwnPropertyDescriptor:Q,getOwnPropertyNames:Z,getOwnPropertySymbols:ee}),L&&a(a.S+a.F*(!B||c(function(){var e=C();return"[null]"!=M([e])||"{}"!=M({a:e})||"{}"!=M(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!J(e)){for(var t,n,r=[e],o=1;arguments.length>o;)r.push(arguments[o++]);return t=r[1],"function"==typeof t&&(n=t),!n&&b(t)||(t=function(e,t){if(n&&(t=n.call(this,e,t)),!J(t))return t}),r[1]=t,M.apply(L,r)}}}),C[P][D]||n(8)(C[P],D,C[P].valueOf),f(C,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},function(e,t,n){n(31)("asyncIterator")},function(e,t,n){n(31)("observable")},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(u===setTimeout)return setTimeout(e,0);if((u===n||!u)&&setTimeout)return u=setTimeout,setTimeout(e,0);try{return u(e,0)}catch(t){try{return u.call(null,e,0)}catch(t){return u.call(this,e,0)}}}function i(e){if(f===clearTimeout)return clearTimeout(e);if((f===r||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(e);try{return f(e)}catch(t){try{return f.call(null,e)}catch(t){return f.call(this,e)}}}function a(){h&&p&&(h=!1,p.length?v=p.concat(v):m=-1,v.length&&s())}function s(){if(!h){var e=o(a);h=!0;for(var t=v.length;t;){for(p=v,v=[];++m1)for(var n=1;n=0,i=o&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,e.exports=n(98),o)r.regeneratorRuntime=i;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}}).call(t,function(){return this}())},function(e,t,n){(function(t,n){!function(t){"use strict";function r(e,t,n,r){var o=Object.create((t||i).prototype),a=new v(r||[]);return o._invoke=f(e,n,a),o}function o(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function i(){}function a(){}function s(){}function l(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function c(e){this.arg=e}function u(e){function t(n,r,i,a){var s=o(e[n],e,r);if("throw"!==s.type){var l=s.arg,u=l.value;return u instanceof c?Promise.resolve(u.arg).then(function(e){t("next",e,i,a)},function(e){t("throw",e,i,a)}):Promise.resolve(u).then(function(e){l.value=e,i(l)},a)}a(s.arg)}function r(e,n){function r(){return new Promise(function(r,o){t(e,n,r,o)})}return i=i?i.then(r,r):r()}"object"==typeof n&&n.domain&&(t=n.domain.bind(t));var i;this._invoke=r}function f(e,t,n){var r=k;return function(i,a){if(r===O)throw new Error("Generator is already running");if(r===S){if("throw"===i)throw a;return m()}for(;;){var s=n.delegate;if(s){if("return"===i||"throw"===i&&s.iterator[i]===y){n.delegate=null;var l=s.iterator.return;if(l){var c=o(l,s.iterator,a);if("throw"===c.type){i="throw",a=c.arg;continue}}if("return"===i)continue}var c=o(s.iterator[i],s.iterator,a);if("throw"===c.type){n.delegate=null,i="throw",a=c.arg;continue}i="next",a=y;var u=c.arg;if(!u.done)return r=E,u;n[s.resultName]=u.value,n.next=s.nextLoc,n.delegate=null}if("next"===i)n.sent=n._sent=a;else if("throw"===i){if(r===k)throw r=S,a;n.dispatchException(a)&&(i="next",a=y)}else"return"===i&&n.abrupt("return",a);r=O;var c=o(e,t,n);if("normal"===c.type){r=n.done?S:E;var u={value:c.arg,done:n.done};if(c.arg!==A)return u;n.delegate&&"next"===i&&(a=y)}else"throw"===c.type&&(r=S,i="throw",a=c.arg)}}}function d(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function p(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function v(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(d,this),this.reset(!0)}function h(e){if(e){var t=e[_];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,r=function t(){for(;++n=0;--r){var o=this.tryEntries[r],i=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var a=b.call(o,"catchLoc"),s=b.call(o,"finallyLoc");if(a&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&b.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),p(n),A}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;p(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:h(e),resultName:t,nextLoc:n},A}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(t,function(){return this}(),n(96))}])},{}],125:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(d===clearTimeout)return clearTimeout(e);if((d===o||!d)&&clearTimeout)return d=clearTimeout,clearTimeout(e);try{return d(e)}catch(t){try{return d.call(null,e)}catch(t){return d.call(this,e)}}}function s(){m&&v&&(m=!1,v.length?h=v.concat(h):y=-1,h.length&&l())}function l(){if(!m){var e=i(s);m=!0;for(var t=h.length;t;){for(v=h,h=[];++y1)for(var n=1;n=0,i=o&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,t.exports=e("./runtime"),o)r.regeneratorRuntime=i;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./runtime":127}],127:[function(e,t,n){(function(e,n){!function(n){"use strict";function r(e,t,n,r){var o=t&&t.prototype instanceof i?t:i,a=Object.create(o.prototype),s=new p(r||[]);return a._invoke=u(e,n,s),a}function o(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function i(){}function a(){}function s(){}function l(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function c(t){function n(e,r,i,a){var s=o(t[e],t,r);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&b.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,i,a)},function(e){n("throw",e,i,a)}):Promise.resolve(c).then(function(e){l.value=e,i(l)},a)}a(s.arg)}function r(e,t){function r(){return new Promise(function(r,o){n(e,t,r,o)})}return i=i?i.then(r,r):r()}"object"==typeof e&&e.domain&&(n=e.domain.bind(n));var i;this._invoke=r}function u(e,t,n){var r=k;return function(i,a){if(r===O)throw new Error("Generator is already running");if(r===S){if("throw"===i)throw a;return h()}for(;;){var s=n.delegate;if(s){if("return"===i||"throw"===i&&s.iterator[i]===m){n.delegate=null;var l=s.iterator.return;if(l){var c=o(l,s.iterator,a);if("throw"===c.type){i="throw",a=c.arg;continue}}if("return"===i)continue}var c=o(s.iterator[i],s.iterator,a);if("throw"===c.type){n.delegate=null,i="throw",a=c.arg;continue}i="next",a=m;var u=c.arg;if(!u.done)return r=E,u;n[s.resultName]=u.value,n.next=s.nextLoc,n.delegate=null}if("next"===i)n.sent=n._sent=a;else if("throw"===i){if(r===k)throw r=S,a;n.dispatchException(a)&&(i="next",a=m)}else"return"===i&&n.abrupt("return",a);r=O;var c=o(e,t,n);if("normal"===c.type){r=n.done?S:E;var u={value:c.arg,done:n.done};if(c.arg!==A)return u;n.delegate&&"next"===i&&(a=m)}else"throw"===c.type&&(r=S,i="throw",a=c.arg)}}}function f(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function d(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function p(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(f,this),this.reset(!0)}function v(e){if(e){var t=e[_];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,r=function t(){for(;++n=0;--r){var o=this.tryEntries[r],i=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var a=b.call(o,"catchLoc"),s=b.call(o,"finallyLoc");if(a&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&b.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),d(n),A}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;d(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:v(e),resultName:t,nextLoc:n},A}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:125}],128:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});n.defaultOptions={controlPosition:"right",append:!1,controlOrder:["autocomplete","button","checkbox","checkbox-group","date","file","header","hidden","paragraph","number","radio-group","select","text","textarea"],dataType:"json",disableFields:[],disabledAttrs:[],disabledActionButtons:[],editOnAdd:!1,defaultFields:[],fields:[],fieldRemoveWarn:!1,inputSets:[],roles:{1:"Administrator"},notify:{error:function(e){return console.error(e)},success:function(e){return console.log(e)},warning:function(e){return console.warn(e)}},onSave:function(e,t){return null},onClearAll:function(){return null},prepend:!1,sortableControls:!1,stickyControls:{enable:!0,offset:{top:5,bottom:"auto",right:"auto"}},templates:{},showActionButtons:!0,typeUserDisabledAttrs:{},typeUserAttrs:{},typeUserEvents:{},prefix:"form-builder-"},n.defaultI18n={location:"https://formbuilder.online/assets/lang/",langs:["en-US"],preloaded:{"en-US":{addOption:"Add Option +",allFieldsRemoved:"All fields were removed.",allowMultipleFiles:"Allow users to upload multiple files",autocomplete:"Autocomplete",button:"Button",cannotBeEmpty:"This field cannot be empty",checkboxGroup:"Checkbox Group",checkbox:"Checkbox",checkboxes:"Checkboxes",className:"Class",clearAllMessage:"Are you sure you want to clear all fields?",clear:"Clear",close:"Close",content:"Content",copy:"Copy To Clipboard",copyButton:"+",copyButtonTooltip:"Copy",dateField:"Date Field",description:"Help Text",descriptionField:"Description",devMode:"Developer Mode",editNames:"Edit Names",editorTitle:"Form Elements",editXML:"Edit XML",enableOther:"Enable "Other"",enableOtherMsg:"Let users to enter an unlisted option",fieldNonEditable:"This field cannot be edited.",fieldRemoveWarning:"Are you sure you want to remove this field?",fileUpload:"File Upload",formUpdated:"Form Updated",getStarted:"Drag a field from the right to this area",header:"Header",hide:"Edit",hidden:"Hidden Input",inline:"Inline",inlineDesc:"Display {type} inline",label:"Label",labelEmpty:"Field Label cannot be empty",limitRole:"Limit access to one or more of the following roles:",mandatory:"Mandatory",maxlength:"Max Length",minOptionMessage:"This field requires a minimum of 2 options",multipleFiles:"Multiple Files",name:"Name",no:"No",noFieldsToClear:"There are no fields to clear",number:"Number",off:"Off",on:"On",option:"Option",options:"Options",optional:"optional",optionLabelPlaceholder:"Label",optionValuePlaceholder:"Value",optionEmpty:"Option value required",other:"Other",paragraph:"Paragraph",placeholder:"Placeholder","placeholder.value":"Value","placeholder.label":"Label","placeholder.text":"","placeholder.textarea":"","placeholder.email":"Enter you email","placeholder.placeholder":"","placeholder.className":"space separated classes","placeholder.password":"Enter your password",preview:"Preview",radioGroup:"Radio Group",radio:"Radio",removeMessage:"Remove Element",removeOption:"Remove Option",remove:"×",required:"Required",richText:"Rich Text Editor",roles:"Access",rows:"Rows",save:"Save",selectOptions:"Options",select:"Select",selectColor:"Select Color",selectionsMessage:"Allow Multiple Selections",size:"Size","size.xs":"Extra Small","size.sm":"Small","size.m":"Default","size.lg":"Large",style:"Style",styles:{btn:{default:"Default",danger:"Danger",info:"Info",primary:"Primary",success:"Success",warning:"Warning"}},subtype:"Type",text:"Text Field",textArea:"Text Area",toggle:"Toggle",warning:"Warning!",value:"Value",viewJSON:"{ }",viewXML:"</>",yes:"Yes"}}},n.config={}},{}],129:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0}),n.availablefields=n.Data=n.instanceData=void 0;var o=e("babel-runtime/helpers/classCallCheck"),i=r(o),a=n.instanceData={};n.Data=function e(t){(0,i.default)(this,e),this.formData={},this.formID=t,this.layout="",a[t]=this},n.availablefields={}},{"babel-runtime/helpers/classCallCheck":12}],130:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0}),n.optionFieldsRegEx=n.optionFields=n.filter=n.empty=n.defaultSubtypes=n.instanceDom=void 0;var o=e("babel-runtime/helpers/classCallCheck"),i=r(o),a=n.instanceDom={},s=n.defaultSubtypes={text:["text","password","email","color","tel"],header:["h1","h2","h3"],button:["button","submit","reset"],paragraph:["p","address","blockquote","canvas","output"],textarea:["textarea","quill"]},l=n.empty=function(e){for(;e.firstChild;)e.removeChild(e.firstChild);return e},c=n.filter=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=[],o=["none","block"];n&&(o=o.reverse());for(var i=e.length-1;i>=0;i--){var a=e[i].textContent.toLowerCase();a.indexOf(t.toLowerCase())!==-1?(e[i].style.display=o[0],r.push(e[i])):e[i].style.display=o[1]}return r},u=n.optionFields=["select","checkbox-group","checkbox","radio-group","autocomplete"],f=n.optionFieldsRegEx=new RegExp("("+u.join("|")+")"),d=function e(t){return(0,i.default)(this,e),this.optionFields=u,this.optionFieldsRegEx=f,this.subtypes=s,this.empty=l,this.filter=c,a[t]=this,a[t]};n.default=d},{"babel-runtime/helpers/classCallCheck":12}],131:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r={};r.loaded=new Event("loaded"),r.viewData=new Event("viewData"),r.userDeclined=new Event("userDeclined"),r.modalClosed=new Event("modalClosed"),r.modalOpened=new Event("modalOpened"),r.formSaved=new Event("formSaved"),r.fieldAdded=new Event("fieldAdded"),r.fieldRemoved=new Event("fieldRemoved"),r.fieldRendered=new Event("fieldRendered"),n.default=r},{}],132:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=e("babel-runtime/core-js/promise"),i=r(o),a=e("babel-runtime/regenerator"),s=r(a),l=e("babel-runtime/helpers/asyncToGenerator"),c=r(l),u=e("babel-runtime/core-js/object/keys"),f=r(u),d=e("babel-runtime/core-js/object/assign"),p=r(d),v=e("babel-runtime/helpers/toConsumableArray"),h=r(v),m=e("babel-runtime/helpers/objectWithoutProperties"),y=r(m),b=e("./dom"),g=r(b),_=e("./data"),w=e("mi18n"),x=r(w),j=e("./utils"),k=r(j),E=e("./events"),O=r(E),S=e("./helpers"),A=r(S),T=e("./config");e("./polyfills.js").default;var N=(new Date).getTime(),C=function e(t,n){function r(e,t){var n=[];for(var r in e)if(e.hasOwnProperty(r)){var a=u[r],s=e[r].value;e[r].value=t[r]||e[r].value||"",e[r].label&&(u[r]=e[r].label),e[r].options?n.push(i(r,e[r])):n.push(o(r,e[r])),u[r]=a,e[r].value=s}return n.join("")}function o(e,t){var n={id:e+"-"+v.lastID,title:t.description||t.label||e.toUpperCase(),name:e,type:t.type||"text",className:["fld-"+e]},r='";k.default.inArray(n.type,["checkbox","checkbox-group","radio-group"])||n.className.push("form-control"),n=(0,p.default)({},t,n);var o="",i='
'+o+"
";return'
'+r+i+"
"}function i(e,t){var n=(0,f.default)(t.options).map(function(e){var n={value:e};return e===t.value&&(n.selected=null),""}),r={id:e+"-"+v.lastID,title:t.description||t.label||e.toUpperCase(),name:e,className:"fld-"+e+" form-control"},o='";(0,f.default)(t).filter(function(e){return!k.default.inArray(e,["value","options","label"])}).forEach(function(e){r[e]=t[e]});var i="",a='
'+i+"
";return'
'+o+a+"
"}var a=this,l=this,u=x.default.current,d="frmb-"+N++,v=new _.Data(d),m=new g.default(d),b=new A.default(d),w=k.default.markup,j=t;t=b.processOptions(t);var E=T.config.subtypes=b.processSubtypes(t.subtypes);b.editorUI(d);var S=$(m.stage);v.layout=b.editorLayout(t.controlPosition),v.formID=d,v.lastID=v.formID+"-fld-1";var C=b.orderFields(t.fields);t.disableFields&&(C=C.filter(function(e){return!k.default.inArray(e.attrs.type,t.disableFields)})),t.sortableControls&&m.controls.classList.add("sort-enabled");var L=$(m.controls);k.default.forEach(C,function(e){var t=C[e],n=t.attrs,r=t.icon,o=(0,y.default)(t,["attrs","icon"]),i=o.label,a=r?"":"icon-"+(n.name||n.type);r&&(i=''+r+""+o.label);var s=w("li",w("span",i),{className:a+" input-control input-control-"+e});_.availablefields[n.type]=C[e],s.dataset.type=n.type,m.controls.appendChild(s)}),t.inputSets.length&&($("
  • ",{class:"fb-separator"}).html("
    ").appendTo(L),t.inputSets.forEach(function(e,t){e.name=e.name||k.default.makeClassName(e.label);var n=w("li",e.label,{className:"input-set-control input-set-"+t,type:e.name});$(n).appendTo(L)})),S.sortable({cursor:"move",opacity:.9,revert:150,beforeStop:function(e,t){return b.beforeStop.call(b,e,t)},start:function(e,t){return b.startMoving.call(b,e,t)},stop:function(e,t){return b.stopMoving.call(b,e,t)},cancel:"input, select, textarea, .disabled-field, .form-elements, .btn, button",placeholder:"frmb-placeholder"}),L.sortable({helper:"clone",opacity:.9,connectWith:S,cancel:".fb-separator",cursor:"move",scroll:!1,placeholder:"ui-state-highlight",start:function(e,t){return b.startMoving.call(b,e,t)},stop:function(e,t){return b.stopMoving.call(b,e,t)},revert:150,beforeStop:function(e,t){return b.beforeStop.call(b,e,t)},distance:3,update:function(e,n){return!b.doCancel&&void(n.item.parent()[0]===m.stage?(b.doCancel=!0,M(n.item)):(b.setFieldOrder(L),b.doCancel=!t.sortableControls))}});var M=function(e){if(e[0].classList.contains("input-set-control")){var n=[],r=t.inputSets.filter(function(t){return t.name===e[0].type})[0];if(r.showHeader){var o={type:"header",subtype:"h2",id:r.name,label:r.label};n.push(o)}n.push.apply(n,(0,h.default)(r.fields)),n.forEach(function(e){B(e,!0),(b.stopIndex||0===b.stopIndex)&&b.stopIndex++})}else B(e,!0)};m.editorWrap=w("div",null,{id:v.formID+"-form-wrap",className:"form-wrap form-builder"+k.default.mobileClass()});var P=$(m.editorWrap),F=w("div",m.controls,{id:v.formID+"-cb-wrap",className:"cb-wrap "+v.layout.controls});if(t.showActionButtons){var D=t.actionButtons.map(function(e){if(e.id&&t.disabledActionButtons.indexOf(e.id)===-1)return b.processActionButtons(e)}),I=m.formActions=w("div",D,{className:"form-actions btn-group"});F.appendChild(I)}var R=w("div",[m.stage,F],{id:v.formID+"-stage-wrap",className:"stage-wrap "+v.layout.stage});P.append(R,F),"textarea"!==n.type?$(n).append(P):$(n).replaceWith(P);var q=k.default.debounce(function(e){if(e){if("keyup"===e.type&&"className"===e.target.name)return!1;var t=$(e.target).closest(".form-field");b.updatePreview(t),b.save.call(b)}});S.on("change blur keyup",".form-elements input, .form-elements select, .form-elements textarea",q),$("li",m.controls).click(function(e){var t=$(e.target).closest("li");b.stopIndex=void 0,M(t),b.save.call(b)});var U=function(){var e=[],n=function(e){return k.default.markup("li",t[e],{className:"disabled-field form-"+e})};return t.prepend&&!$(".disabled-field.form-prepend",m.stage).length&&(e.push(!0),S.prepend(n("prepend"))), -t.append&&!$(".disabled-field.form-.append",m.stage).length&&(e.push(!0),S.append(n("append"))),b.disabledTT(m.stage),e.some(function(e){return e===!0})},B=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n={};if(e instanceof jQuery){var r=_.availablefields[e[0].dataset.type],o=r.attrs,i=r.label;if(_.availablefields[e[0].dataset.type])n=(0,p.default)({},o),n.label=i;else{var a=e[0].attributes;t||(n.values=e.children().map(function(e,t){return{label:$(t).text(),value:$(t).attr("value"),selected:Boolean($(t).attr("selected"))}}));for(var s=a.length-1;s>=0;s--)n[a[s].name]=a[s].value}}else n=(0,p.default)({},e);n.name||(n.name=k.default.nameAttr(n)),t&&k.default.inArray(n.type,["text","number","file","date","select","textarea","autocomplete"])?n.className=n.className||"form-control":n.className=n.className;var l=/(?:^|\s)btn-(.*?)(?:\s|$)/g.exec(n.className);l&&(n.style=l[1]),k.default.escapeAttrs(n),Z(n,t),t&&document.dispatchEvent(O.default.fieldAdded),R.classList.remove("empty")},H=function(e){if(e=b.getData(e),e&&e.length){for(var n=0;n'+u.selectOptions+""],r=t.multiple||"checkbox-group"===t.type,o=function(e){var n={label:e,value:k.default.hyphenCase(e)};return"autocomplete"!==t.type&&(n.selected=!1),n};if(t.values&&t.values.length)t.values.forEach(function(e){return(0,p.default)({},{selected:!1},e)});else{var i=k.default.inArray(t.type,["checkbox-group","checkbox"])?[1]:[1,2,3];t.values=i.map(function(e){var t=u.option+" "+e;return o(t)});var a=t.values[0];a.hasOwnProperty("selected")&&(a.selected=!0)}return e.push('
    '),e.push('
      '),k.default.forEach(t.values,function(n){e.push(ee(t.name,t.values[n],r))}),e.push("
    "),e.push(k.default.markup("div",n,{className:"option-actions"}).outerHTML),e.push("
    "),k.default.markup("div",e.join(""),{className:"form-group field-options"}).outerHTML},G=function(e){var t=["required","label","description","placeholder","className","name","access","value"],n=["header","paragraph","file","autocomplete"].concat(m.optionFields),r=!k.default.inArray(e,n),o={autocomplete:t.concat(["options"]),button:["label","subtype","style","className","name","value","access"],checkbox:["required","label","description","toggle","inline","className","name","access","other","options"],text:t.concat(["subtype","maxlength"]),date:t,file:t.concat(["multiple"]),header:["label","subtype","className","access"],hidden:["name","value","access"],paragraph:["label","subtype","className","access"],number:t.concat(["min","max","step"]),select:t.concat(["multiple","options"]),textarea:t.concat(["subtype","maxlength","rows"])};o["checkbox-group"]=o.checkbox,o["radio-group"]=o.checkbox;var i=o[e];return"radio-group"===e&&k.default.remove("toggle",i),k.default.inArray(e,["header","paragraph","button"])&&k.default.remove("description",i),r||k.default.remove("value",i),i||t},z=function e(n){var e=[],o=G(n.type),i={required:function(){return Q(n)},toggle:function(){return J("toggle",n,{first:u.toggle})},inline:function(){var e={first:u.inline,second:x.default.get("inlineDesc",n.type.replace("-group",""))};return J("inline",n,e)},label:function(){return V("label",n)},description:function(){return V("description",n)},subtype:function(){return K("subtype",n,E[n.type])},style:function(){return Y(n.style)},placeholder:function(){return V("placeholder",n)},rows:function(){return X("rows",n)},className:function(){return V("className",n)},name:function(){return V("name",n)},value:function(){return V("value",n)},maxlength:function(){return X("maxlength",n)},access:function(){var e=void 0!==n.role?'style="display:block"':"",r=['
    "];for(a in t.roles)if(t.roles.hasOwnProperty(a)){var o=k.default.inArray(a,s)?"checked":"",i="fld-"+v.lastID+"-roles-"+a;r.push('
    ")}r.push("
    ");var l={first:u.roles,second:u.limitRole,content:r.join("")};return J("access",n,l)},other:function(){return J("other",n,{first:u.enableOther,second:u.enableOtherMsg})},options:function(){return W(n)}},a=void 0,s=void 0!==n.role?n.role.split(","):[],l=["min","max","step"];return"number"===n.type&&l.forEach(function(e){i[e]=function(){return X(e,n)}}),"file"===n.type&&(i.multiple=function(){var e={first:u.multipleFiles,second:u.allowMultipleFiles};return J("multiple",n,e)}),"select"===n.type&&(i.multiple=function(){return J("multiple",n,{first:" ",second:u.selectionsMessage})}),(0,f.default)(o).forEach(function(r){var a=o[r],s=[!0];if(t.typeUserDisabledAttrs[n.type]){var l=t.typeUserDisabledAttrs[n.type];s.push(!k.default.inArray(a,l))}if(t.typeUserAttrs[n.type]){var c=(0,f.default)(t.typeUserAttrs[n.type]);s.push(!k.default.inArray(a,c))}k.default.inArray(a,t.disabledAttrs)&&s.push(!1),s.every(function(e){return e===!0})&&e.push(i[a]())}),t.typeUserAttrs[n.type]&&e.push(r(t.typeUserAttrs[n.type],n)),e.join("")},J=function(e,n,r){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var o=function(t){return'"},i=void 0!==n[e]?"checked":"",a=' ',s=[],l=[a];return r.first&&s.unshift(o(r.first)),r.second&&l.push(o(r.second)),r.content&&l.push(r.content),l.unshift('
    '),l.push("
    "),'
    '+s.concat(l).join("")+"
    "}},Y=function(e){var t=u.styles.btn,n="";if(t){var r="";n+='',n+='
    ',(0,f.default)(t).forEach(function(t){var r=["btn-xs","btn","btn-"+t];e===t&&r.push("selected"),n+='"}),n+="
    ",n='
    '+r+" "+n+"
    "}return n},X=function e(n,r){if(!t.typeUserAttrs[r.type]||!t.typeUserAttrs[r.type][n]){var o=r[n],i=u[n]||n,a=u["placeholder."+n],s={type:"number",value:o,name:n,min:"0",placeholder:a,className:"fld-"+n+" form-control",id:n+"-"+v.lastID},e="",l='
    '+e+"
    ";return'
    "+l+"
    "}},K=function(e,n,r){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var o=r.map(function(t,r){var o=(0,p.default)({label:u.option+" "+r,value:void 0},t);return t.value===n[e]&&(o.selected=!0),""}),i={id:e+"-"+v.lastID,name:e,className:"fld-"+e+" form-control"},a='",s="",l='
    '+s+"
    ";return'
    '+a+l+"
    "}},V=function(e,n){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var r=["text","textarea","select","autocomplete"],o=["header","paragraph"],i=["paragraph"],a=n[e]||"",s=u[e];"label"===e&&(k.default.inArray(n.type,i)?s=u.content:a=k.default.parsedHtml(n[e])),E.header&&(o=o.concat(E.header));var l=u["placeholder."+e]||"",c="",f=[];if("placeholder"!==e||k.default.inArray(n.type,r)||f.push(!0),"name"===e&&k.default.inArray(n.type,o)&&f.push(!0),!f.some(function(e){return e===!0})){var d={name:e,placeholder:l,className:"fld-"+e+" form-control",id:e+"-"+v.lastID},p='";"label"===e?c+="
    "+a+"
    ":(d.value=a,d.type="text",c+="");var h='
    '+c+"
    ",m="block";"value"===e&&(m=n.subtype&&"quill"===n.subtype&&"none"),c='
    '+p+" "+h+"
    "}return c}},Q=function(e){var t=["header","paragraph","button"],n=[],r="";return k.default.inArray(e.type,t)&&n.push(!0),n.some(function(e){return e===!0})||(r=J("required",e,{first:u.required})),r},Z=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=e.type||"text",o=e.label||u[r]||u.label,i=w("a",u.remove,{id:"del_"+v.lastID,className:"del-button btn delete-confirm",title:u.removeMessage}),a=w("a",null,{id:v.lastID+"-edit",className:"toggle-form btn icon-pencil",title:u.hide}),s=w("a",null,{id:v.lastID+"-copy",className:"copy-button btn icon-copy",title:u.copyButtonTooltip}),l=w("div",[a,s,i],{className:"field-actions"}).outerHTML;l+='";var c=e.required?'style="display:inline"':"";l+=' *";var f={className:"tooltip-element",tooltip:e.description,style:e.description?"display:inline-block":"display:none"};l+="?",l+=w("div","",{className:"prev-holder"}).outerHTML,l+='
    ',l+='
    ',l+=z(e),l+=w("a",u.close,{className:"close-field"}).outerHTML,l+="
    ",l+="
    ";var d=w("li",l,{class:r+"-field form-field",type:r,id:v.lastID}),p=$(d);p.data("fieldData",{attrs:e}),"undefined"!=typeof b.stopIndex?$("> li",m.stage).eq(b.stopIndex).before(p):S.append(p),$(".sortable-options",p).sortable({update:function(){return b.updatePreview(p)}}),b.updatePreview(p),t.typeUserEvents[r]&&t.typeUserEvents[r].onadd&&t.typeUserEvents[r].onadd(d),t.editOnAdd&&n&&(b.closeAllEdit(),b.toggleEdit(v.lastID,!1)),v.lastID=b.incrementId(v.lastID)},ee=function(e,t,n){var r={selected:n?"checkbox":"radio"},o=["value","label","selected"],i=[],a={selected:!1,label:"",value:""};t=(0,p.default)(a,t);for(var s=o.length-1;s>=0;s--){var l=o[s];if(t.hasOwnProperty(l)){var c={type:r[l]||"text",className:"option-"+l,value:t[l],name:e+"-option"};c.placeholder=u["placeholder."+l]||"","selected"===l&&t.selected===!0&&(c.checked=t.selected),i.push(w("input",null,c))}}var f={className:"remove btn",title:u.removeMessage};i.push(k.default.markup("a",u.remove,f));var d=k.default.markup("li",i);return d.outerHTML},te=function(e){var n=e.attr("id"),r=e.attr("type"),o=(new Date).getTime(),i=r+"-"+o,a=e.clone();return a.find("[id]").each(function(e,t){t.id=t.id.replace(n,v.lastID)}),a.find("[for]").each(function(){this.setAttribute("for",this.getAttribute("for").replace(n,v.lastID))}),a.each(function(){$("e:not(.form-elements)").each(function(){var e=this.getAttribute("name");e=e.substring(0,e.lastIndexOf("-")+1),e+=o.toString(),this.setAttribute("name",e)})}),a.find(".form-elements").find(":input").each(function(){if("name"===this.getAttribute("name")){var e=this.getAttribute("value");e=e.substring(0,e.lastIndexOf("-")+1),e+=o.toString(),this.setAttribute("value",e)}}),a.attr("id",v.lastID),a.attr("name",i),a.addClass("cloned"),$(".sortable-options",a).sortable(),t.typeUserEvents[r]&&t.typeUserEvents[r].onclone&&t.typeUserEvents[r].onclone(a[0]),v.lastID=b.incrementId(v.lastID),a};return S.on("click touchstart",".remove",function(e){var n=$(this).parents(".form-field:eq(0)");e.preventDefault();var r=$(this).parents(".sortable-options:eq(0)").children("li").length;r<=2?t.notify.error("Error: "+u.minOptionMessage):$(this).parent("li").slideUp("250",function(){$(this).remove(),b.updatePreview(n),b.save.call(b)})}),S.on("touchstart","input",function(e){var t=$(this);if(e.handled===!0)return!1;if("checkbox"===t.attr("type"))t.trigger("click");else{t.focus();var n=t.val();t.val(n)}}),S.on("click touchstart",".toggle-form, .close-field",function(e){if(e.stopPropagation(),e.preventDefault(),e.handled===!0)return!1;var t=$(e.target).parents(".form-field:eq(0)").attr("id");b.toggleEdit(t),e.handled=!0}),S.on("change",'[name="subtype"]',function(e){var t=$(e.target).closest("li.form-field"),n=$(".value-wrap",t);n.toggle("quill"!==e.target.value)}),S.on("change",".prev-holder input, .prev-holder select, .prev-holder textarea",function(e){var t=void 0;if(!e.target.classList.contains("other-option")){var n=k.default.closest(e.target,".form-field");if(k.default.inArray(n.type,["select","checkbox-group","radio-group"])){var r=n.getElementsByClassName("option-value");"select"===n.type?k.default.forEach(r,function(t){var n=r[t].parentElement.childNodes[0];n.checked=e.target.value===r[t].value}):(t=document.getElementsByName(e.target.name),k.default.forEach(t,function(e){var n=r[e].parentElement.childNodes[0];n.checked=t[e].checked}))}else{var o=document.getElementById("value-"+n.id);o&&(o.value=e.target.value)}b.save.call(b)}}),k.default.addEventListeners(m.stage,"keyup change",function(e){if(e.target.classList.contains("fld-label")){var t=e.target.value||e.target.innerHTML,n=k.default.closest(e.target,".form-field").querySelector(".field-label");n.innerHTML=k.default.parsedHtml(t)}}),S.on("keyup","input.error",function(e){$(e.target).removeClass("error")}),S.on("keyup",'input[name="description"]',function(e){var t=$(e.target).parents(".form-field:eq(0)"),n=$(".tooltip-element",t),r=$(e.target).val();if(""!==r)if(n.length)n.attr("tooltip",r).css("display","inline-block");else{var o='?';$(".field-label",t).after(o)}else n.length&&n.css("display","none")}),S.on("change",".fld-multiple",function(e){var t=e.target.checked?"checkbox":"radio",n=$(".option-selected",$(e.target).closest(".form-elements"));return n.each(function(e){return n[e].type=t}),t}),S.on("blur","input.fld-name",function(e){e.target.value=k.default.safename(e.target.value),""===e.target.value?$(e.target).addClass("field-error").attr("placeholder",u.cannotBeEmpty):$(e.target).removeClass("field-error")}),S.on("blur","input.fld-maxlength",function(e){e.target.value=k.default.forceNumber(e.target.value)}),S.on("click touchstart",".icon-copy",function(e){e.preventDefault();var t=$(e.target).parent().parent("li"),n=te(t);n.insertAfter(t),b.updatePreview(n),b.save.call(b)}),S.on("click touchstart",".delete-confirm",function(e){e.preventDefault();var n=e.target.getBoundingClientRect(),r=document.body.getBoundingClientRect(),o={pageX:n.left+n.width/2,pageY:n.top-r.top-12},i=$(e.target).parents(".form-field:eq(0)").attr("id"),a=$(document.getElementById(i));if(document.addEventListener("modalClosed",function(){a.removeClass("deleting")},!1),t.fieldRemoveWarn){var s=k.default.markup("h3",u.warning),l=k.default.markup("p",u.fieldRemoveWarning);b.confirm([s,l],function(){return b.removeField(i)},o),a.addClass("deleting")}else b.removeField(i)}),S.on("click",".style-wrap button",function(e){var t=$(e.target),n=t.val(),r=t.parent().prev(".btn-style");r.val(n),t.siblings(".btn").removeClass("selected"),t.addClass("selected"),b.updatePreview(r.closest(".form-field")),b.save.call(b)}),S.on("click",".fld-required",function(e){$(e.target).closest(".form-field").find(".required-asterisk").toggle()}),S.on("click","input.fld-access",function(e){var t=$(e.target).closest(".form-field").find(".available-roles"),n=$(e.target);t.slideToggle(250,function(){n.is(":checked")||$('input[type="checkbox"]',t).removeAttr("checked")})}),S.on("click",".add-opt",function(e){e.preventDefault();var t=$(e.target).closest(".field-options"),n=$('[name="multiple"]',t),r=$(".option-selected:eq(0)",t),o=!1;o=n.length?n.prop("checked"):"checkbox"===r.attr("type");var i=r.attr("name");$(".sortable-options",t).append(ee(i,!1,o))}),S.on("mouseover mouseout",".remove, .del-button",function(e){return $(e.target).closest("li").toggleClass("delete")}),H(),S.css("min-height",L.height()),t.stickyControls.enable&&b.stickyControls(S),document.dispatchEvent(O.default.loaded),l.actions={clearFields:function(e){return b.removeAllFields(m.stage,e)},showData:b.showData.bind(b),save:b.save.bind(b),addField:function(e,t){b.stopIndex=v.formData.length?t:void 0,B(e),document.dispatchEvent(O.default.fieldAdded)},removeField:b.removeField.bind(b),getData:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"js",t=m.stage,n=b,r={js:function(){return n.prepData(t)},xml:function(){return n.xmlSave(t)},json:function(){return window.JSON.stringify(n.prepData(t),null,"\t")}};return r[e]()},setData:function(e){b.removeAllFields(m.stage,!1),H(e)},setLang:function(){var t=(0,c.default)(s.default.mark(function t(r){var o;return s.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,x.default.setCurrent.call(x.default,r);case 2:m.empty(n),o=new e(j,n),$(n).data("formBuilder",o);case 5:case"end":return t.stop()}},t,a)}));return function(e){return t.apply(this,arguments)}}()},l};!function(e){e.fn.formBuilder=function(t){t||(t={});var n=this,r=e.extend({},T.defaultOptions,t,!0),o=r.i18n,a=(0,y.default)(r,["i18n"]);T.config.opts=a;var s=e.extend({},T.defaultI18n,o,!0),l={actions:{getData:null,setData:null,save:null,showData:null,setLang:null,addField:null,removeField:null,clearFields:null},get formData(){return l.actions.getData("json")},promise:new i.default(function(t,r){x.default.init(s).then(function(){n.each(function(t){var r=new C(a,n[t]);e(n[t]).data("formBuilder",r),l.actions=r.actions}),delete l.promise,t(l)}).catch(r)})};return l}}(jQuery)},{"./config":128,"./data":129,"./dom":130,"./events":131,"./helpers":133,"./polyfills.js":134,"./utils":135,"babel-runtime/core-js/object/assign":5,"babel-runtime/core-js/object/keys":7,"babel-runtime/core-js/promise":8,"babel-runtime/helpers/asyncToGenerator":11,"babel-runtime/helpers/objectWithoutProperties":14,"babel-runtime/helpers/toConsumableArray":16,"babel-runtime/regenerator":18,mi18n:124}],133:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0});var o=e("babel-runtime/helpers/objectWithoutProperties"),i=r(o),a=e("babel-runtime/core-js/object/assign"),s=r(a),l=e("babel-runtime/core-js/object/keys"),c=r(l),u=e("babel-runtime/regenerator"),f=r(u),d=e("babel-runtime/helpers/asyncToGenerator"),p=r(d),v=e("babel-runtime/helpers/classCallCheck"),h=r(v),m=e("babel-runtime/helpers/createClass"),y=r(m),b=e("./dom"),g=e("./data"),_=e("./utils"),w=r(_),x=e("./events"),j=r(x),k=e("mi18n"),E=r(k),O=e("./config"),S=O.config.opts,A=w.default.markup,T=function(){function e(t){(0,h.default)(this,e),this.data=g.instanceData[t],this.d=b.instanceDom[t],this.doCancel=!1}return(0,y.default)(e,[{key:"startMoving",value:function(e,t){t.item.show().addClass("moving"),this.doCancel=!0,this.from=t.item.parent()}},{key:"stopMoving",value:function(e,t){var n=this;t.item.removeClass("moving"),n.doCancel&&(t.sender&&$(t.sender).sortable("cancel"),this.from.sortable("cancel")),n.save(),n.doCancel=!1}},{key:"beforeStop",value:function(e,t){var n=this,r=O.config.opts,o=n.d.stage,i=o.childNodes.length-1,a=[];n.stopIndex=t.placeholder.index()-1,!r.sortableControls&&t.item.parent().hasClass("frmb-control")&&a.push(!0),r.prepend&&a.push(0===n.stopIndex),r.append&&a.push(n.stopIndex+1===i),n.doCancel=a.some(function(e){return e===!0})}},{key:"getTypes",value:function(e){var t={type:e.attr("type")},n=$(".fld-subtype",e).val();return n!==t.type&&(t.subtype=n),t}},{key:"fieldOptionData",value:function(e){var t=[];return $(".sortable-options li",e).each(function(){var e=$(this),n=$(".option-selected",e).is(":checked"),r={label:$(".option-label",e).val(),value:$(".option-value",e).val()};n&&(r.selected=n),t.push(r)}),t}},{key:"xmlSave",value:function(e){var t=this.prepData(e),n=["\n\t"];return w.default.forEach(t,function(e,t){var r=null,o=b.optionFieldsRegEx;if(t.type.match(o)){for(var i=t.values,a=[],s=0;s\n"),n.join("")}},{key:"prepData",value:function(e){var t=[],n=this.d,r=this;return 0!==e.childNodes.length&&w.default.forEach(e.childNodes,function(){var e=(0,p.default)(f.default.mark(function e(o,i){var a,s,l,c,u,d,p,v,h,m;return f.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:a=$(i),a.hasClass("disabled-field")||(s=r.getTypes(a),l=$(".roles-field:checked",i).map(function(e){return e.value}).get(),r.setAttrVals(i,s),s.subtype&&("quill"===s.subtype?(c=s.name+"-preview",window.fbEditors.quill[c]&&(u=window.fbEditors.quill[c].instance,d=u.getContents(),s.value=window.JSON.stringify(d.ops))):"tinymce"===s.subtype&&window.tinymce&&(p=s.name+"-preview",window.tinymce.editors[p]&&(v=window.tinymce.editors[p],s.value=v.getContent()))),l.length&&(s.role=l.join(",")),s.className=s.className||s.class,h=/(?:^|\s)btn-(.*?)(?:\s|$)/g.exec(s.className),h&&(s.style=h[1]),s=w.default.trimObj(s),m=s.type.match(n.optionFieldsRegEx),m&&(s.values=r.fieldOptionData(a)),t.push(s));case 2:case"end":return e.stop()}},e,this)}));return function(t,n){return e.apply(this,arguments)}}()),t}},{key:"getData",value:function(e){var t=this.data;if(e||(e=O.config.opts.formData),!e)return!1;var n={xml:function(e){return w.default.parseXML(e)},json:function(e){return window.JSON.parse(e)}};return t.formData=n[O.config.opts.dataType](e)||[],t.formData}},{key:"save",value:function(e){var t=this,n=this.data;e||(e=this.d.stage);var r={xml:function(){return t.xmlSave(e)},json:function(){return window.JSON.stringify(t.prepData(e),null,"\t")}};return n.formData=r[O.config.opts.dataType](e),document.dispatchEvent(j.default.formSaved),n.formData}},{key:"incrementId",value:function(e){var t=e.lastIndexOf("-"),n=parseInt(e.substring(t+1))+1,r=e.substring(0,t);return r+"-"+n}},{key:"setAttrVals",value:function(e,t){var n=e.querySelectorAll('[class*="fld-"]');n.forEach(function(e){var n=void 0,r=w.default.camelCase(e.getAttribute("name"));n=e.attributes.contenteditable?e.innerHTML:"checkbox"===e.type?e.checked:e.value,t[r]=n})}},{key:"updatePreview",value:function(e){var t=this,n=this.d,r=e.attr("class"),o=e[0];if(r.indexOf("input-control")===-1){var i=e.attr("type"),a=$(".prev-holder",o),s={type:i},l=void 0;t.setAttrVals(o,s);var c=$(".btn-style",o).val();c&&(s.style=c),i.match(n.optionFieldsRegEx)&&(s.values=[],s.multiple=$('[name="multiple"]',o).is(":checked"),$(".sortable-options li",o).each(function(e,t){var n={};n.selected=$(".option-selected",t).is(":checked"),n.value=$(".option-value",t).val(),n.label=$(".option-label",t).val(),s.values.push(n)})),s=w.default.trimObj(s),s.className=t.classNames(o,s),$(".fld-className",o).val(s.className),e.data("fieldData",s),l=w.default.getTemplate(s,!0),(0,b.empty)(a[0]),a[0].appendChild(l),l.dispatchEvent(j.default.fieldRendered)}}},{key:"disabledTT",value:function(e){var t=function(e,t){var n=t.field.getBoundingClientRect(),r=e.clientX-n.left-21,o=e.clientY-n.top-t.tt.offsetHeight-12;t.tt.style.transform="translate("+r+"px, "+o+"px)"};e.querySelectorAll(".disabled-field").forEach(function(e){var n=S.messages.fieldNonEditable;if(n){var r=w.default.markup("p",n,{className:"frmb-tt"});e.appendChild(r),e.addEventListener("mousemove",function(n){return t(n,{tt:r,field:e})})}})}},{key:"classNames",value:function(e,t){var n=e.querySelector(".fld-className");if(n){var r=void 0,o=t.type,i=t.style,a=n.value.split(" "),s={button:"btn",submit:"btn"},l=s[o];if(l){if(i){for(r=0;r2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=this,i=E.default.current,a=o.showOverlay(),s=A("button",i.yes,{className:"yes btn btn-success btn-sm"}),l=A("button",i.no,{className:"no btn btn-danger btn-sm"});l.onclick=function(){o.closeConfirm(a)},s.onclick=function(){t(),o.closeConfirm(a)};var c=A("div",[l,s],{className:"button-wrap"});r="form-builder-dialog "+r;var u=A("div",[e,c],{className:r});if(n)u.classList.add("positioned");else{var f=document.documentElement;n={pageX:Math.max(f.clientWidth,window.innerWidth||0)/2,pageY:Math.max(f.clientHeight,window.innerHeight||0)/2},u.style.position="fixed"}return u.style.left=n.pageX+"px",u.style.top=n.pageY+"px",document.body.appendChild(u),s.focus(),u}},{key:"dialog",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=this,o=document.documentElement.clientWidth,i=document.documentElement.clientHeight;r.showOverlay(),n="form-builder-dialog "+n;var a=w.default.markup("div",e,{className:n});return t?a.classList.add("positioned"):(t={pageX:Math.max(o,window.innerWidth||0)/2,pageY:Math.max(i,window.innerHeight||0)/2},a.style.position="fixed"),a.style.left=t.pageX+"px",a.style.top=t.pageY+"px",document.body.appendChild(a),document.dispatchEvent(j.default.modalOpened),n.indexOf("data-dialog")!==-1&&document.dispatchEvent(j.default.viewData),a}},{key:"confirmRemoveAll",value:function(e){var t=this,n=e.target.id.match(/frmb-\d{13}/)[0],r=document.getElementById(n),o=E.default.current,i=$("li.form-field",r),a=e.target.getBoundingClientRect(),s=document.body.getBoundingClientRect(),l={pageX:a.left+a.width/2,pageY:a.top-s.top-12};i.length?t.confirm(o.clearAllMessage,function(){t.removeAllFields.call(t,r),O.config.opts.notify.success(o.allFieldsRemoved),O.config.opts.onClearAll()},l):t.dialog(o.noFieldsToClear,l)}},{key:"removeAllFields",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=E.default.current,o=O.config.opts,i=e.querySelectorAll("li.form-field"),a=[];if(!i.length)return!1;if(o.prepend&&a.push(!0),o.append&&a.push(!0),a.some(function(e){return e===!0})||(e.parentElement.classList.add("empty"),e.parentElement.dataset.content=r.getStarted),t){e.classList.add("removing");var s=0;i.forEach(function(e){return s+=e.offsetHeight+3}),i[0].style.marginTop=-s+"px",setTimeout(function(){(0,b.empty)(e).classList.remove("removing"),n.save(e)},400)}else(0,b.empty)(e),n.save(e)}},{key:"setFieldOrder",value:function(e){if(!O.config.opts.sortableControls)return!1;var t={};e.children().each(function(e,n){t[e]=$(n).data("type")}),window.sessionStorage&&window.sessionStorage.setItem("fieldOrder",window.JSON.stringify(t))}},{key:"orderFields",value:function(e){var t=O.config.opts,n=!1,r=[];if(window.sessionStorage&&(t.sortableControls?n=window.sessionStorage.getItem("fieldOrder"):window.sessionStorage.removeItem("fieldOrder")),n)n=window.JSON.parse(n),n=(0,c.default)(n).map(function(e){return n[e]});else{var o=t.controlOrder.concat(e.map(function(e){return e.attrs.type}));n=w.default.unique(o)}return n.forEach(function(t){var n=e.filter(function(e){return e.attrs.type===t})[0];r.push(n)}),r.filter(Boolean)}},{key:"closeAllEdit",value:function(){var e=this,t=$("> li.editing",e.d.stage),n=$(".toggle-form",e.d.stage),r=$(".frm-holder",t);n.removeClass("open"),t.removeClass("editing"),$(".prev-holder",t).show(),r.hide()}},{key:"toggleEdit",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=document.getElementById(e),r=$(".toggle-form",n),o=$(".frm-holder",n);n.classList.toggle("editing"),r.toggleClass("open"),t?($(".prev-holder",n).slideToggle(250),o.slideToggle(250)):($(".prev-holder",n).toggle(),o.toggle()),this.updatePreview($(n))}},{key:"stickyControls",value:function(){var e=this.d,t=$(e.controls).parent(),n=$(e.stage).parent(),r=t.width(),o=e.controls.getBoundingClientRect();$(window).scroll(function(i){var a=$(i.target).scrollTop(),l={top:5,bottom:"auto",right:"auto",left:o.left},c=(0,s.default)({},l,O.config.opts.stickyControls.offset);if(a>n.offset().top){var u={position:"fixed",width:r},f=(0,s.default)(u,c),d=t.offset(),p=n.offset(),v=d.top+t.height(),h=p.top+n.height();v>h&&d.top!==p.top&&t.css({position:"absolute",top:"auto",bottom:0,right:0,left:"auto"}),(va)&&t.css(f)}else e.controls.parentElement.removeAttribute("style")})}},{key:"showData",value:function(e){var t=this.data,n=w.default.escapeHtml(t.formData),r=A("code",n,{className:"formData-"+O.config.opts.dataType});this.dialog(A("pre",r),null,"data-dialog")}},{key:"removeField",value:function(e){var t=!1,n=this,r=this.d.stage,o=r.getElementsByClassName("form-field");if(!o.length)return console.warn("No fields to remove"),!1;if(!e){var i=[].slice.call(o).map(function(e){return e.id});console.warn("fieldID required to remove specific fields. Removing last field since no ID was supplied."),console.warn("Available IDs: "+i.join(", ")),e=r.lastChild.id}var a=document.getElementById(e),s=$(a);return a?(s.slideUp(250,function(){if(s.removeClass("deleting"),s.remove(),t=!0,n.save(),!r.childNodes.length){var e=r.parentElement;e.classList.add("empty"),e.dataset.content=E.default.current.getStarted}}),document.dispatchEvent(j.default.fieldRemoved),t):(console.warn("Field not found"),!1)}},{key:"processActionButtons",value:function(e){var t=e.label,n=e.events,r=(0,i.default)(e,["label","events"]),o=this.data;t=t?E.default.current[t]||"":r.id?E.default.current[r.id]||w.default.capitalize(r.id):"",r.id?r.id=o.formID+"-"+r.id+"-action":r.id=o.formID+"-action-"+Math.round(1e3*Math.random());var a=A("button",t,r);if(n){var s=function(e){n.hasOwnProperty(e)&&a.addEventListener(e,function(t){return n[e](t)})};for(var l in n)s(l)}return a}},{key:"processSubtypes",value:function(e){var t={},n=function(e){return{label:E.default.get(e),value:e}};O.config.subtypes=w.default.merge(b.defaultSubtypes,e);for(var r in O.config.subtypes)O.config.subtypes.hasOwnProperty(r)&&(t[r]=O.config.subtypes[r].map(n));return t}},{key:"editorUI",value:function(e){var t=this.d,n=this.data;t.stage=A("ul",null,{id:n.formID,className:"frmb"}),t.controls=A("ul",null,{id:n.formID+"-control-box",className:"frmb-control"})}},{key:"processOptions",value:function(e){var t=this,n=e.fields,r=void 0===n?[]:n,o=e.templates,a=(0,i.default)(e,["fields","templates"]),l=[{id:"clear",className:"clear-all btn btn-danger",events:{click:t.confirmRemoveAll.bind(t)}},{label:"viewJSON",id:"data",className:"btn btn-default",events:{click:t.showData.bind(t)}},{id:"save",type:"button",className:"btn btn-primary save-template",events:{click:function(e){t.save(),O.config.opts.onSave(e,t.data.formData)}}}],u=[{label:E.default.get("autocomplete"),attrs:{type:"autocomplete"}},{label:E.default.get("button"),attrs:{type:"button"}},{label:E.default.get("checkboxGroup"),attrs:{type:"checkbox-group"}},{label:E.default.get("dateField"),attrs:{type:"date"}},{label:E.default.get("fileUpload"),attrs:{type:"file"}},{label:E.default.get("header"),attrs:{type:"header"}},{label:E.default.get("hidden"),attrs:{type:"hidden"}},{label:E.default.get("number"),attrs:{type:"number"}},{label:E.default.get("paragraph"),attrs:{type:"paragraph"}},{label:E.default.get("radioGroup"),attrs:{type:"radio-group"}},{ -label:E.default.get("select"),attrs:{type:"select"}},{label:E.default.get("text"),attrs:{type:"text"}},{label:E.default.get("textArea"),attrs:{type:"textarea"}}];a.fields=r.concat(u),O.config.opts=(0,s.default)({},{actionButtons:l,templates:o,fields:r},a);var f=(0,c.default)(O.config.opts.templates).map(function(e){return[e,O.config.opts.templates[e]]});return w.default.templates=w.default.templates.concat(f),O.config.opts}}]),e}();n.default=T},{"./config":128,"./data":129,"./dom":130,"./events":131,"./utils":135,"babel-runtime/core-js/object/assign":5,"babel-runtime/core-js/object/keys":7,"babel-runtime/helpers/asyncToGenerator":11,"babel-runtime/helpers/classCallCheck":12,"babel-runtime/helpers/createClass":13,"babel-runtime/helpers/objectWithoutProperties":14,"babel-runtime/regenerator":18,mi18n:124}],134:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(){"remove"in Element.prototype||(Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)}),"function"!=typeof Event&&!function(){window.Event=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!0),t}}(),"function"!=typeof a.default&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");e=Object(e);for(var t=1;t>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(t=arguments[1]),n=0;n1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=g.contentType(t),o=n.events,i=(0,h.default)(n,["events"]),a=document.createElement(e),s={string:function(e){a.innerHTML+=e},object:function(e){var t=e.tag,n=e.content,r=(0,h.default)(e,["tag","content"]);return a.appendChild(g.markup(t,n,r))},node:function(e){return a.appendChild(e)},array:function(e){for(var t=0;t":">"},n=function(e){return t[e]||e};return"string"==typeof e?e.replace(/["&<>]/g,n):e},g.escapeAttrs=function(e){for(var t in e)e.hasOwnProperty(t)&&(e[t]=g.escapeAttr(e[t]));return e},g.forEach=function(e,t,n){for(var r=0;r-1&&t.splice(n,1)},g.makeLabel=function(e){var t=e.label,n=void 0===t?"":t,r=e.description,o=void 0===r?"":r,i=(0,h.default)(e,["label","description"]),a=g.parsedHtml(n),s=[a];i.required&&s.push(_("span"," *",{className:"fb-required"})),"hidden"!==i.type&&o&&s.push(_("span","?",{className:"tooltip-element",tooltip:o}));var l={className:"fb-"+i.type+"-label"};return i.id&&(l.for=i.id),_("label",s,l)},g.templateMap=function(e){var t=void 0,n=g.templates,r=!0,o=!1,i=void 0;try{for(var a,s=(0,f.default)(n);!(r=(a=s.next()).done);r=!0){var l=a.value,c=(0,p.default)(l,2),u=c[0],d=c[1];if(Array.isArray(u)){if(g.inArray(e,u)){t=d;break}}else if(e===u){t=d;break}}}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return t},g.autocompleteTemplate=function(e){var t=e.values,n=e.type,r=(0,h.default)(e,["values","type"]),o=function(e){var t=e.target.nextSibling.nextSibling,n=t.getElementsByClassName("active-option")[0],r=[[38,function(){n&&n.previousSibling&&(n.classList.remove("active-option"),n=n.previousSibling,n.classList.add("active-option"))}],[40,function(){n?n.nextSibling&&(n.classList.remove("active-option"),n=n.nextSibling,n.classList.add("active-option")):(n=t.firstChild,n.classList.add("active-option"))}],[13,function(){n&&(e.target.value=n.innerHTML,"none"===t.style.display?t.style.display="block":t.style.display="none")}]],o=new c.default(r),i=o.get(e.keyCode);return i||(i=function(){return!1}),i()},i={focus:function(e){var t=e.target.nextSibling.nextSibling;e.target.addEventListener("keydown",o),t.style.display="block",t.style.width=t.parentElement.offsetWidth+"px"},blur:function(e){e.target.removeEventListener("keydown",o),setTimeout(function(){e.target.nextSibling.nextSibling.style.display="none"},200)},input:function(e){var t=e.target.nextSibling.nextSibling;(0,b.filter)(t.querySelectorAll("li"),e.target.value),e.target.value?t.style.display="block":t.style.display="none"}},a=(0,s.default)({},r,{id:r.id+"-input",events:i}),l=(0,s.default)({},r,{type:"hidden"});delete a.name;var u=[_("input",null,a),_("input",null,l)],f=t.map(function(e){var t=e.label,n={events:{click:function(t){var n=t.target.parentElement,r=n.previousSibling.previousSibling;r.value=e.label,r.previousSibling.value=e.value,n.style.display="none"}},value:e.value};return _("li",t,n)});u.push(_("ul",f,{id:r.id+"-list",className:"fb-"+n+"-list"}));var d=function(e){};return{field:u,onRender:d}},g.selectTemplate=function(e,t){var n=[],r=e.values,o=e.type,i=e.inline,a=e.other,l=e.toggle,c=(0,h.default)(e,["values","type","inline","other","toggle"]),u=g.processFieldDataAttrs(c,t),f=o.replace("-group",""),d="select"===o;if(r){u.placeholder&&d&&n.push(_("option",u.placeholder,{disabled:null,selected:null}));for(var p=0;p1&&void 0!==arguments[1]?arguments[1]:"js",n=!1,r=window.fbLoaded[t];return n=Array.isArray(e)?e.every(function(e){return g.inArray(e,r)}):g.inArray(e,r)},g.getStyles=function(e,t){if(!g.isCached(e,"css")){var n=function(e){var t=document.createElement("link");t.type="text/css",t.rel="stylesheet",t.href=e,document.head.appendChild(t),window.fbLoaded.css.push(e)};e.forEach(function(e){return n((t||"")+e)})}},g.longTextTemplate=function(e){var t=e.value,n=void 0===t?"":t,r=(0,h.default)(e,["value"]),o={field:_("textarea",g.parsedHtml(n),r)},i={tinymce:{js:["//cdn.tinymce.com/4/tinymce.min.js"],onRender:function(t){window.tinymce.editors[e.id]&&window.tinymce.editors[e.id].remove(),window.tinymce.init({target:o.field,height:250,plugins:["advlist autolink lists link image charmap print preview anchor","searchreplace visualblocks code fullscreen","insertdatetime media table contextmenu paste code"],toolbar:"insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"})}},quill:{js:["//cdn.quilljs.com/1.1.3/quill.js"],css:["//cdn.quilljs.com/1.1.3/quill.snow.css"],onRender:function(t){var i=window.Quill.import("delta");window.fbEditors.quill[e.id]={};var a=window.fbEditors.quill[e.id];a.instance=new window.Quill(o.field,{modules:{toolbar:[[{header:[1,2,!1]}],["bold","italic","underline"],["code-block"]]},placeholder:r.placeholder||"",theme:"snow"}),a.data=new i,n&&a.instance.setContents(window.JSON.parse(g.parsedHtml(n))),a.instance.on("text-change",function(e){a.data=a.data.compose(e)})}}};"textarea"!==e.type&&(o.onRender=i[e.type].onRender),"quill"===e.type&&(o.field=_("div",null,r));var a=function t(){i[e.type]&&(document.removeEventListener("fieldRendered",t),i[e.type].css&&g.getStyles(i[e.type].css),i[e.type].js&&!g.isCached(i[e.type].js)?g.getScripts(i[e.type].js).done(o.onRender):o.onRender())};return{field:o.field,onRender:a}},g.templates=[["autocomplete",function(e){var t=g.processFieldDataAttrs(e),n=g.makeLabel(e),r=g.autocompleteTemplate(t),o={field:[n,r.field],onRender:r.onRender};return o}],[b.defaultSubtypes.text.concat(["number","file","date"]),function(e){var t=g.processFieldDataAttrs(e),n=g.makeLabel(e),r={field:[n,_("input",null,t)]};return r}],[["paragraph"].concat(b.defaultSubtypes.paragraph),function(e){var t=g.processFieldDataAttrs(e),n={field:[_(e.type,g.parsedHtml(e.label),t)]};return n}],[b.defaultSubtypes.button,function(e){var t=g.processFieldDataAttrs(e),n={field:_("button",e.label,t)};return n}],[["select","checkbox-group","radio-group","checkbox"],function(e){var t=g.makeLabel(e),n=g.selectTemplate(e),r={field:[t,n]};return r}],[["textarea","tinymce","quill"],function(e){var t=g.processFieldDataAttrs(e),n=g.longTextTemplate(t),r=g.makeLabel(e),o={field:[r,n.field],onRender:n.onRender};return o}]],g.processFieldDataAttrs=function(e){var t=(e.label,e.description,e.subtype),n=(0,h.default)(e,["label","description","subtype"]);return n.id||(n.id=n.name),t&&(n.type=t),(n.multiple||"checkbox-group"===n.type)&&(n.name=n.name+"[]"),n.required&&(n.required=!0,n["aria-required"]="true"),n},g.getTemplate=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=void 0;t&&(e.name?e.name=e.name+"-preview":e.name=g.nameAttr(e)+"-preview");var r=g.templateMap(e.type);if(r=r?r(e,t):g.defaultField(e,t)(),"hidden"!==e.type){var o={};e.name&&(o.className="fb-"+e.type+" form-group field-"+e.name),n=g.markup("div",r.field,o)}else{var i=g.processFieldDataAttrs(e);n=g.markup("input",null,i)}return r.onRender&&n.addEventListener("fieldRendered",r.onRender),n},g.otherOptionCB=function(e){var t=document.getElementById(e),n=document.getElementById(e+"-value");t.checked?n.style.display="inline-block":n.style.display="none"},g.capitalize=function(e){return e.replace(/\b\w/g,function(e){return e.toUpperCase()})},g.merge=function(e,t){var n=(0,s.default)({},e,t);for(var r in t)n.hasOwnProperty(r)&&(Array.isArray(t[r])?n[r]=Array.isArray(e[r])?g.unique(e[r].concat(t[r])):t[r]:"object"===(0,y.default)(t[r])?n[r]=g.merge(e[r],t[r]):n[r]=t[r]);return n},g.addEventListeners=function(e,t,n){return t.split(" ").forEach(function(t){return e.addEventListener(t,n,!1)})},g.closest=function(e,t){for(var n=t.replace(".","");(e=e.parentElement)&&!e.classList.contains(n););return e},g.noop=function(){return null},g.debounce=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:250,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=void 0;return function(){for(var o=arguments.length,i=Array(o),a=0;a1&&void 0!==arguments[1]&&arguments[1],n={};if(e instanceof jQuery){var r=_.availablefields[e[0].dataset.type],o=r.attrs,i=r.label;if(_.availablefields[e[0].dataset.type])n=(0,p.default)({},o),n.label=i;else{var a=e[0].attributes;t||(n.values=e.children().map(function(e,t){return{label:$(t).text(),value:$(t).attr("value"),selected:Boolean($(t).attr("selected"))}}));for(var s=a.length-1;s>=0;s--)n[a[s].name]=a[s].value}}else n=(0,p.default)({},e);n.name||(n.name=k.default.nameAttr(n)),t&&k.default.inArray(n.type,["text","number","file","date","select","textarea","autocomplete"])?n.className=n.className||"form-control":n.className=n.className;var l=/(?:^|\s)btn-(.*?)(?:\s|$)/g.exec(n.className);l&&(n.style=l[1]),k.default.escapeAttrs(n),Z(n,t),t&&document.dispatchEvent(O.default.fieldAdded),R.classList.remove("empty")},H=function(e){if(e=b.getData(e),e&&e.length){for(var n=0;n'+u.selectOptions+""],r=t.multiple||"checkbox-group"===t.type,o=function(e){var n={label:e,value:k.default.hyphenCase(e)};return"autocomplete"!==t.type&&(n.selected=!1),n};if(t.values&&t.values.length)t.values.forEach(function(e){return(0,p.default)({},{selected:!1},e)});else{var i=k.default.inArray(t.type,["checkbox-group","checkbox"])?[1]:[1,2,3];t.values=i.map(function(e){var t=u.option+" "+e;return o(t)});var a=t.values[0];a.hasOwnProperty("selected")&&(a.selected=!0)}return e.push('
    '),e.push('
      '),k.default.forEach(t.values,function(n){e.push(ee(t.name,t.values[n],r))}),e.push("
    "),e.push(k.default.markup("div",n,{className:"option-actions"}).outerHTML),e.push("
    "),k.default.markup("div",e.join(""),{className:"form-group field-options"}).outerHTML},G=function(e){var t=["required","label","description","placeholder","className","name","access","value"],n=["header","paragraph","file","autocomplete"].concat(m.optionFields),r=!k.default.inArray(e,n),o={autocomplete:t.concat(["options"]),button:["label","subtype","style","className","name","value","access"],checkbox:["required","label","description","toggle","inline","className","name","access","other","options"],text:t.concat(["subtype","maxlength"]),date:t,file:t.concat(["multiple"]),header:["label","subtype","className","access"],hidden:["name","value","access"],paragraph:["label","subtype","className","access"],number:t.concat(["min","max","step"]),select:t.concat(["multiple","options"]),textarea:t.concat(["subtype","maxlength","rows"])};o["checkbox-group"]=o.checkbox,o["radio-group"]=o.checkbox;var i=o[e];return"radio-group"===e&&k.default.remove("toggle",i),k.default.inArray(e,["header","paragraph","button"])&&k.default.remove("description",i),r||k.default.remove("value",i),i||t},z=function e(n){var e=[],o=G(n.type),i={required:function(){return Q(n)},toggle:function(){return J("toggle",n,{first:u.toggle})},inline:function(){var e={first:u.inline,second:x.default.get("inlineDesc",n.type.replace("-group",""))};return J("inline",n,e)},label:function(){return V("label",n)},description:function(){return V("description",n)},subtype:function(){return K("subtype",n,E[n.type])},style:function(){return Y(n.style)},placeholder:function(){return V("placeholder",n)},rows:function(){return X("rows",n)},className:function(){return V("className",n)},name:function(){return V("name",n)},value:function(){return V("value",n)},maxlength:function(){return X("maxlength",n)},access:function(){var e=void 0!==n.role?'style="display:block"':"",r=['
    "];for(a in t.roles)if(t.roles.hasOwnProperty(a)){var o=k.default.inArray(a,s)?"checked":"",i="fld-"+v.lastID+"-roles-"+a;r.push('
    ")}r.push("
    ");var l={first:u.roles,second:u.limitRole,content:r.join("")};return J("access",n,l)},other:function(){return J("other",n,{first:u.enableOther,second:u.enableOtherMsg})},options:function(){return W(n)}},a=void 0,s=void 0!==n.role?n.role.split(","):[],l=["min","max","step"];return"number"===n.type&&l.forEach(function(e){i[e]=function(){return X(e,n)}}),"file"===n.type&&(i.multiple=function(){var e={first:u.multipleFiles,second:u.allowMultipleFiles};return J("multiple",n,e)}),"select"===n.type&&(i.multiple=function(){return J("multiple",n,{first:" ",second:u.selectionsMessage})}),(0,f.default)(o).forEach(function(r){var a=o[r],s=[!0];if(t.typeUserDisabledAttrs[n.type]){var l=t.typeUserDisabledAttrs[n.type];s.push(!k.default.inArray(a,l))}if(t.typeUserAttrs[n.type]){var c=(0,f.default)(t.typeUserAttrs[n.type]);s.push(!k.default.inArray(a,c))}k.default.inArray(a,t.disabledAttrs)&&s.push(!1),s.every(function(e){return e===!0})&&e.push(i[a]())}),t.typeUserAttrs[n.type]&&e.push(r(t.typeUserAttrs[n.type],n)),e.join("")},J=function(e,n,r){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var o=function(t){return'"},i=n[e]?"checked":"",a=' ',s=[],l=[a];return r.first&&s.unshift(o(r.first)),r.second&&l.push(o(r.second)),r.content&&l.push(r.content),l.unshift('
    '),l.push("
    "),'
    '+s.concat(l).join("")+"
    "}},Y=function(e){var t=u.styles.btn,n="";if(t){var r="";n+='',n+='
    ',(0,f.default)(t).forEach(function(t){var r=["btn-xs","btn","btn-"+t];e===t&&r.push("selected"),n+='"}),n+="
    ",n='
    '+r+" "+n+"
    "}return n},X=function e(n,r){if(!t.typeUserAttrs[r.type]||!t.typeUserAttrs[r.type][n]){var o=r[n],i=u[n]||n,a=u["placeholder."+n],s={type:"number",value:o,name:n,min:"0",placeholder:a,className:"fld-"+n+" form-control",id:n+"-"+v.lastID},e="",l='
    '+e+"
    ";return'
    "+l+"
    "}},K=function(e,n,r){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var o=r.map(function(t,r){var o=(0,p.default)({label:u.option+" "+r,value:void 0},t);return t.value===n[e]&&(o.selected=!0),""}),i={id:e+"-"+v.lastID,name:e,className:"fld-"+e+" form-control"},a='",s="",l='
    '+s+"
    ";return'
    '+a+l+"
    "}},V=function(e,n){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var r=["text","textarea","select","autocomplete"],o=["header","paragraph"],i=["paragraph"],a=n[e]||"",s=u[e];"label"===e&&(k.default.inArray(n.type,i)?s=u.content:a=k.default.parsedHtml(n[e])),E.header&&(o=o.concat(E.header));var l=u["placeholder."+e]||"",c="",f=[];if("placeholder"!==e||k.default.inArray(n.type,r)||f.push(!0),"name"===e&&k.default.inArray(n.type,o)&&f.push(!0),!f.some(function(e){return e===!0})){var d={name:e,placeholder:l,className:"fld-"+e+" form-control",id:e+"-"+v.lastID},p='";"label"===e?c+="
    "+a+"
    ":(d.value=a,d.type="text",c+="");var h='
    '+c+"
    ",m="block";"value"===e&&(m=n.subtype&&"quill"===n.subtype&&"none"),c='
    '+p+" "+h+"
    "}return c}},Q=function(e){var t=["header","paragraph","button"],n=[],r="";return k.default.inArray(e.type,t)&&n.push(!0),n.some(function(e){return e===!0})||(r=J("required",e,{first:u.required})),r},Z=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=e.type||"text",o=e.label||u[r]||u.label,i=w("a",u.remove,{id:"del_"+v.lastID,className:"del-button btn delete-confirm",title:u.removeMessage}),a=w("a",null,{id:v.lastID+"-edit",className:"toggle-form btn icon-pencil",title:u.hide}),s=w("a",null,{id:v.lastID+"-copy",className:"copy-button btn icon-copy",title:u.copyButtonTooltip}),l=w("div",[a,s,i],{className:"field-actions"}).outerHTML;l+='";var c=e.required?'style="display:inline"':"";l+=' *";var f={className:"tooltip-element",tooltip:e.description,style:e.description?"display:inline-block":"display:none"};l+="?",l+=w("div","",{className:"prev-holder"}).outerHTML,l+='
    ',l+='
    ',l+=z(e),l+=w("a",u.close,{className:"close-field"}).outerHTML,l+="
    ",l+="
    ";var d=w("li",l,{class:r+"-field form-field",type:r,id:v.lastID}),p=$(d);p.data("fieldData",{attrs:e}),"undefined"!=typeof b.stopIndex?$("> li",m.stage).eq(b.stopIndex).before(p):S.append(p),$(".sortable-options",p).sortable({update:function(){return b.updatePreview(p)}}),b.updatePreview(p),t.typeUserEvents[r]&&t.typeUserEvents[r].onadd&&t.typeUserEvents[r].onadd(d),t.editOnAdd&&n&&(b.closeAllEdit(),b.toggleEdit(v.lastID,!1)),v.lastID=b.incrementId(v.lastID)},ee=function(e,t,n){var r={selected:n?"checkbox":"radio"},o=["value","label","selected"],i=[],a={selected:!1,label:"",value:""};t=(0,p.default)(a,t);for(var s=o.length-1;s>=0;s--){var l=o[s];if(t.hasOwnProperty(l)){var c={type:r[l]||"text",className:"option-"+l,value:t[l],name:e+"-option"};c.placeholder=u["placeholder."+l]||"","selected"===l&&t.selected===!0&&(c.checked=t.selected),i.push(w("input",null,c))}}var f={className:"remove btn",title:u.removeMessage};i.push(k.default.markup("a",u.remove,f));var d=k.default.markup("li",i);return d.outerHTML},te=function(e){var n=e.attr("id"),r=e.attr("type"),o=(new Date).getTime(),i=r+"-"+o,a=e.clone();return a.find("[id]").each(function(e,t){t.id=t.id.replace(n,v.lastID)}),a.find("[for]").each(function(){this.setAttribute("for",this.getAttribute("for").replace(n,v.lastID))}),a.each(function(){$("e:not(.form-elements)").each(function(){var e=this.getAttribute("name");e=e.substring(0,e.lastIndexOf("-")+1),e+=o.toString(),this.setAttribute("name",e)})}),a.find(".form-elements").find(":input").each(function(){if("name"===this.getAttribute("name")){var e=this.getAttribute("value");e=e.substring(0,e.lastIndexOf("-")+1),e+=o.toString(),this.setAttribute("value",e)}}),a.attr("id",v.lastID),a.attr("name",i),a.addClass("cloned"),$(".sortable-options",a).sortable(),t.typeUserEvents[r]&&t.typeUserEvents[r].onclone&&t.typeUserEvents[r].onclone(a[0]),v.lastID=b.incrementId(v.lastID),a};return S.on("click touchstart",".remove",function(e){var n=$(this).parents(".form-field:eq(0)");e.preventDefault();var r=$(this).parents(".sortable-options:eq(0)").children("li").length;r<=2?t.notify.error("Error: "+u.minOptionMessage):$(this).parent("li").slideUp("250",function(){$(this).remove(),b.updatePreview(n),b.save.call(b)})}),S.on("touchstart","input",function(e){var t=$(this);if(e.handled===!0)return!1;if("checkbox"===t.attr("type"))t.trigger("click");else{t.focus();var n=t.val();t.val(n)}}),S.on("click touchstart",".toggle-form, .close-field",function(e){if(e.stopPropagation(),e.preventDefault(),e.handled===!0)return!1;var t=$(e.target).parents(".form-field:eq(0)").attr("id");b.toggleEdit(t),e.handled=!0}),S.on("change",'[name="subtype"]',function(e){var t=$(e.target).closest("li.form-field"),n=$(".value-wrap",t);n.toggle("quill"!==e.target.value)}),S.on("change",".prev-holder input, .prev-holder select, .prev-holder textarea",function(e){var t=void 0;if(!e.target.classList.contains("other-option")){var n=k.default.closest(e.target,".form-field");if(k.default.inArray(n.type,["select","checkbox-group","radio-group"])){var r=n.getElementsByClassName("option-value");"select"===n.type?k.default.forEach(r,function(t){var n=r[t].parentElement.childNodes[0];n.checked=e.target.value===r[t].value}):(t=document.getElementsByName(e.target.name),k.default.forEach(t,function(e){var n=r[e].parentElement.childNodes[0];n.checked=t[e].checked}))}else{var o=document.getElementById("value-"+n.id);o&&(o.value=e.target.value)}b.save.call(b)}}),k.default.addEventListeners(m.stage,"keyup change",function(e){if(e.target.classList.contains("fld-label")){var t=e.target.value||e.target.innerHTML,n=k.default.closest(e.target,".form-field").querySelector(".field-label");n.innerHTML=k.default.parsedHtml(t)}}),S.on("keyup","input.error",function(e){$(e.target).removeClass("error")}),S.on("keyup",'input[name="description"]',function(e){var t=$(e.target).parents(".form-field:eq(0)"),n=$(".tooltip-element",t),r=$(e.target).val();if(""!==r)if(n.length)n.attr("tooltip",r).css("display","inline-block");else{var o='?';$(".field-label",t).after(o)}else n.length&&n.css("display","none")}),S.on("change",".fld-multiple",function(e){var t=e.target.checked?"checkbox":"radio",n=$(".option-selected",$(e.target).closest(".form-elements"));return n.each(function(e){return n[e].type=t}),t}),S.on("blur","input.fld-name",function(e){e.target.value=k.default.safename(e.target.value),""===e.target.value?$(e.target).addClass("field-error").attr("placeholder",u.cannotBeEmpty):$(e.target).removeClass("field-error")}),S.on("blur","input.fld-maxlength",function(e){e.target.value=k.default.forceNumber(e.target.value)}),S.on("click touchstart",".icon-copy",function(e){e.preventDefault();var t=$(e.target).parent().parent("li"),n=te(t);n.insertAfter(t),b.updatePreview(n),b.save.call(b)}),S.on("click touchstart",".delete-confirm",function(e){e.preventDefault();var n=e.target.getBoundingClientRect(),r=document.body.getBoundingClientRect(),o={pageX:n.left+n.width/2,pageY:n.top-r.top-12},i=$(e.target).parents(".form-field:eq(0)").attr("id"),a=$(document.getElementById(i));if(document.addEventListener("modalClosed",function(){a.removeClass("deleting")},!1),t.fieldRemoveWarn){var s=k.default.markup("h3",u.warning),l=k.default.markup("p",u.fieldRemoveWarning);b.confirm([s,l],function(){return b.removeField(i)},o),a.addClass("deleting")}else b.removeField(i)}),S.on("click",".style-wrap button",function(e){var t=$(e.target),n=t.val(),r=t.parent().prev(".btn-style");r.val(n),t.siblings(".btn").removeClass("selected"),t.addClass("selected"),b.updatePreview(r.closest(".form-field")),b.save.call(b)}),S.on("click",".fld-required",function(e){$(e.target).closest(".form-field").find(".required-asterisk").toggle()}),S.on("click","input.fld-access",function(e){var t=$(e.target).closest(".form-field").find(".available-roles"),n=$(e.target);t.slideToggle(250,function(){n.is(":checked")||$('input[type="checkbox"]',t).removeAttr("checked")})}),S.on("click",".add-opt",function(e){e.preventDefault();var t=$(e.target).closest(".field-options"),n=$('[name="multiple"]',t),r=$(".option-selected:eq(0)",t),o=!1;o=n.length?n.prop("checked"):"checkbox"===r.attr("type");var i=r.attr("name");$(".sortable-options",t).append(ee(i,!1,o))}),S.on("mouseover mouseout",".remove, .del-button",function(e){return $(e.target).closest("li").toggleClass("delete")}),H(),S.css("min-height",L.height()),t.stickyControls.enable&&b.stickyControls(S),document.dispatchEvent(O.default.loaded),l.actions={clearFields:function(e){return b.removeAllFields(m.stage,e)},showData:b.showData.bind(b),save:b.save.bind(b),addField:function(e,t){b.stopIndex=v.formData.length?t:void 0,B(e),document.dispatchEvent(O.default.fieldAdded)},removeField:b.removeField.bind(b),getData:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"js",t=m.stage,n=b,r={js:function(){return n.prepData(t)},xml:function(){return n.xmlSave(t)},json:function(){return window.JSON.stringify(n.prepData(t),null,"\t")}};return r[e]()},setData:function(e){b.removeAllFields(m.stage,!1),H(e)},setLang:function(){var t=(0,c.default)(s.default.mark(function t(r){var o;return s.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,x.default.setCurrent.call(x.default,r);case 2:m.empty(n),o=new e(j,n),$(n).data("formBuilder",o);case 5:case"end":return t.stop()}},t,a)}));return function(e){return t.apply(this,arguments)}}()},l};!function(e){e.fn.formBuilder=function(t){t||(t={});var n=this,r=e.extend({},T.defaultOptions,t,!0),o=r.i18n,a=(0,y.default)(r,["i18n"]);T.config.opts=a;var s=e.extend({},T.defaultI18n,o,!0),l={actions:{getData:null,setData:null,save:null,showData:null,setLang:null,addField:null,removeField:null,clearFields:null},get formData(){return l.actions.getData("json")},promise:new i.default(function(t,r){x.default.init(s).then(function(){n.each(function(t){var r=new C(a,n[t]);e(n[t]).data("formBuilder",r),l.actions=r.actions}),delete l.promise,t(l)}).catch(r)})};return l}}(jQuery)},{"./config":128,"./data":129,"./dom":130,"./events":131,"./helpers":133,"./polyfills.js":134,"./utils":135,"babel-runtime/core-js/object/assign":5,"babel-runtime/core-js/object/keys":7,"babel-runtime/core-js/promise":8,"babel-runtime/helpers/asyncToGenerator":11,"babel-runtime/helpers/objectWithoutProperties":14,"babel-runtime/helpers/toConsumableArray":16,"babel-runtime/regenerator":18,mi18n:124}],133:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0});var o=e("babel-runtime/helpers/objectWithoutProperties"),i=r(o),a=e("babel-runtime/core-js/object/assign"),s=r(a),l=e("babel-runtime/core-js/object/keys"),c=r(l),u=e("babel-runtime/regenerator"),f=r(u),d=e("babel-runtime/helpers/asyncToGenerator"),p=r(d),v=e("babel-runtime/helpers/classCallCheck"),h=r(v),m=e("babel-runtime/helpers/createClass"),y=r(m),b=e("./dom"),g=e("./data"),_=e("./utils"),w=r(_),x=e("./events"),j=r(x),k=e("mi18n"),E=r(k),O=e("./config"),S=O.config.opts,A=w.default.markup,T=function(){function e(t){(0,h.default)(this,e),this.data=g.instanceData[t],this.d=b.instanceDom[t],this.doCancel=!1}return(0,y.default)(e,[{key:"startMoving",value:function(e,t){t.item.show().addClass("moving"),this.doCancel=!0,this.from=t.item.parent()}},{key:"stopMoving",value:function(e,t){var n=this;t.item.removeClass("moving"),n.doCancel&&(t.sender&&$(t.sender).sortable("cancel"),this.from.sortable("cancel")),n.save(),n.doCancel=!1}},{key:"beforeStop",value:function(e,t){var n=this,r=O.config.opts,o=n.d.stage,i=o.childNodes.length-1,a=[];n.stopIndex=t.placeholder.index()-1,!r.sortableControls&&t.item.parent().hasClass("frmb-control")&&a.push(!0),r.prepend&&a.push(0===n.stopIndex),r.append&&a.push(n.stopIndex+1===i),n.doCancel=a.some(function(e){return e===!0})}},{key:"getTypes",value:function(e){var t={type:e.attr("type")},n=$(".fld-subtype",e).val();return n!==t.type&&(t.subtype=n),t}},{key:"fieldOptionData",value:function(e){var t=[];return $(".sortable-options li",e).each(function(){var e=$(this),n=$(".option-selected",e).is(":checked"),r={label:$(".option-label",e).val(),value:$(".option-value",e).val()};n&&(r.selected=n),t.push(r)}),t}},{key:"xmlSave",value:function(e){var t=this.prepData(e),n=["\n\t"];return w.default.forEach(t,function(e,t){var r=null,o=b.optionFieldsRegEx;if(t.type.match(o)){for(var i=t.values,a=[],s=0;s\n"),n.join("")}},{key:"prepData",value:function(e){var t=[],n=this.d,r=this;return 0!==e.childNodes.length&&w.default.forEach(e.childNodes,function(){var e=(0,p.default)(f.default.mark(function e(o,i){var a,s,l,c,u,d,p,v,h,m;return f.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:a=$(i),a.hasClass("disabled-field")||(s=r.getTypes(a),l=$(".roles-field:checked",i).map(function(e){return e.value}).get(),r.setAttrVals(i,s),s.subtype&&("quill"===s.subtype?(c=s.name+"-preview",window.fbEditors.quill[c]&&(u=window.fbEditors.quill[c].instance,d=u.getContents(),s.value=window.JSON.stringify(d.ops))):"tinymce"===s.subtype&&window.tinymce&&(p=s.name+"-preview",window.tinymce.editors[p]&&(v=window.tinymce.editors[p],s.value=v.getContent()))),l.length&&(s.role=l.join(",")),s.className=s.className||s.class,h=/(?:^|\s)btn-(.*?)(?:\s|$)/g.exec(s.className),h&&(s.style=h[1]),s=w.default.trimObj(s),m=s.type.match(n.optionFieldsRegEx),m&&(s.values=r.fieldOptionData(a)),t.push(s));case 2:case"end":return e.stop()}},e,this)}));return function(t,n){return e.apply(this,arguments)}}()),t}},{key:"getData",value:function(e){var t=this.data;if(e||(e=O.config.opts.formData),!e)return!1;var n={xml:function(e){return w.default.parseXML(e)},json:function(e){return window.JSON.parse(e)}};return t.formData=n[O.config.opts.dataType](e)||[],t.formData}},{key:"save",value:function(e){var t=this,n=this.data;e||(e=this.d.stage);var r={xml:function(){return t.xmlSave(e)},json:function(){return window.JSON.stringify(t.prepData(e),null,"\t")}};return n.formData=r[O.config.opts.dataType](e),document.dispatchEvent(j.default.formSaved),n.formData}},{key:"incrementId",value:function(e){var t=e.lastIndexOf("-"),n=parseInt(e.substring(t+1))+1,r=e.substring(0,t);return r+"-"+n}},{key:"setAttrVals",value:function(e,t){var n=e.querySelectorAll('[class*="fld-"]');n.forEach(function(e){var n=void 0,r=w.default.camelCase(e.getAttribute("name"));n=e.attributes.contenteditable?e.innerHTML:"checkbox"===e.type?e.checked:e.value,t[r]=n})}},{key:"updatePreview",value:function(e){var t=this,n=this.d,r=e.attr("class"),o=e[0];if(r.indexOf("input-control")===-1){var i=e.attr("type"),a=$(".prev-holder",o),s={type:i},l=void 0;t.setAttrVals(o,s);var c=$(".btn-style",o).val();c&&(s.style=c),i.match(n.optionFieldsRegEx)&&(s.values=[],s.multiple=$('[name="multiple"]',o).is(":checked"),$(".sortable-options li",o).each(function(e,t){var n={};n.selected=$(".option-selected",t).is(":checked"),n.value=$(".option-value",t).val(),n.label=$(".option-label",t).val(),s.values.push(n)})),s=w.default.trimObj(s),s.className=t.classNames(o,s),$(".fld-className",o).val(s.className),e.data("fieldData",s),l=w.default.getTemplate(s,!0),(0,b.empty)(a[0]),a[0].appendChild(l),l.dispatchEvent(j.default.fieldRendered)}}},{key:"disabledTT",value:function(e){var t=function(e,t){var n=t.field.getBoundingClientRect(),r=e.clientX-n.left-21,o=e.clientY-n.top-t.tt.offsetHeight-12;t.tt.style.transform="translate("+r+"px, "+o+"px)"};e.querySelectorAll(".disabled-field").forEach(function(e){var n=S.messages.fieldNonEditable;if(n){var r=w.default.markup("p",n,{className:"frmb-tt"});e.appendChild(r),e.addEventListener("mousemove",function(n){return t(n,{tt:r,field:e})})}})}},{key:"classNames",value:function(e,t){var n=e.querySelector(".fld-className");if(n){var r=void 0,o=t.type,i=t.style,a=n.value.split(" "),s={button:"btn",submit:"btn"},l=s[o];if(l){if(i){for(r=0;r2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=this,i=E.default.current,a=o.showOverlay(),s=A("button",i.yes,{className:"yes btn btn-success btn-sm"}),l=A("button",i.no,{className:"no btn btn-danger btn-sm"});l.onclick=function(){o.closeConfirm(a)},s.onclick=function(){t(),o.closeConfirm(a)};var c=A("div",[l,s],{className:"button-wrap"});r="form-builder-dialog "+r;var u=A("div",[e,c],{className:r});if(n)u.classList.add("positioned");else{var f=document.documentElement;n={pageX:Math.max(f.clientWidth,window.innerWidth||0)/2,pageY:Math.max(f.clientHeight,window.innerHeight||0)/2},u.style.position="fixed"}return u.style.left=n.pageX+"px",u.style.top=n.pageY+"px",document.body.appendChild(u),s.focus(),u}},{key:"dialog",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=this,o=document.documentElement.clientWidth,i=document.documentElement.clientHeight;r.showOverlay(),n="form-builder-dialog "+n;var a=w.default.markup("div",e,{className:n});return t?a.classList.add("positioned"):(t={pageX:Math.max(o,window.innerWidth||0)/2,pageY:Math.max(i,window.innerHeight||0)/2},a.style.position="fixed"),a.style.left=t.pageX+"px",a.style.top=t.pageY+"px",document.body.appendChild(a),document.dispatchEvent(j.default.modalOpened),n.indexOf("data-dialog")!==-1&&document.dispatchEvent(j.default.viewData),a}},{key:"confirmRemoveAll",value:function(e){var t=this,n=e.target.id.match(/frmb-\d{13}/)[0],r=document.getElementById(n),o=E.default.current,i=$("li.form-field",r),a=e.target.getBoundingClientRect(),s=document.body.getBoundingClientRect(),l={pageX:a.left+a.width/2,pageY:a.top-s.top-12};i.length?t.confirm(o.clearAllMessage,function(){t.removeAllFields.call(t,r),O.config.opts.notify.success(o.allFieldsRemoved),O.config.opts.onClearAll()},l):t.dialog(o.noFieldsToClear,l)}},{key:"removeAllFields",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=E.default.current,o=O.config.opts,i=e.querySelectorAll("li.form-field"),a=[];if(!i.length)return!1;if(o.prepend&&a.push(!0),o.append&&a.push(!0),a.some(function(e){return e===!0})||(e.parentElement.classList.add("empty"),e.parentElement.dataset.content=r.getStarted),t){e.classList.add("removing");var s=0;i.forEach(function(e){return s+=e.offsetHeight+3}),i[0].style.marginTop=-s+"px",setTimeout(function(){(0,b.empty)(e).classList.remove("removing"),n.save(e)},400)}else(0,b.empty)(e),n.save(e)}},{key:"setFieldOrder",value:function(e){if(!O.config.opts.sortableControls)return!1;var t={};e.children().each(function(e,n){t[e]=$(n).data("type")}),window.sessionStorage&&window.sessionStorage.setItem("fieldOrder",window.JSON.stringify(t))}},{key:"orderFields",value:function(e){var t=O.config.opts,n=!1,r=[];if(window.sessionStorage&&(t.sortableControls?n=window.sessionStorage.getItem("fieldOrder"):window.sessionStorage.removeItem("fieldOrder")),n)n=window.JSON.parse(n),n=(0,c.default)(n).map(function(e){return n[e]});else{var o=t.controlOrder.concat(e.map(function(e){return e.attrs.type}));n=w.default.unique(o)}return n.forEach(function(t){var n=e.filter(function(e){return e.attrs.type===t})[0];r.push(n)}),r.filter(Boolean)}},{key:"closeAllEdit",value:function(){var e=this,t=$("> li.editing",e.d.stage),n=$(".toggle-form",e.d.stage),r=$(".frm-holder",t);n.removeClass("open"),t.removeClass("editing"),$(".prev-holder",t).show(),r.hide()}},{key:"toggleEdit",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=document.getElementById(e),r=$(".toggle-form",n),o=$(".frm-holder",n);n.classList.toggle("editing"),r.toggleClass("open"),t?($(".prev-holder",n).slideToggle(250),o.slideToggle(250)):($(".prev-holder",n).toggle(),o.toggle()),this.updatePreview($(n))}},{key:"stickyControls",value:function(){var e=this.d,t=$(e.controls).parent(),n=$(e.stage).parent(),r=t.width(),o=e.controls.getBoundingClientRect();$(window).scroll(function(i){var a=$(i.target).scrollTop(),l={top:5,bottom:"auto",right:"auto",left:o.left},c=(0,s.default)({},l,O.config.opts.stickyControls.offset);if(a>n.offset().top){var u={position:"fixed",width:r},f=(0,s.default)(u,c),d=t.offset(),p=n.offset(),v=d.top+t.height(),h=p.top+n.height();v>h&&d.top!==p.top&&t.css({position:"absolute",top:"auto",bottom:0,right:0,left:"auto"}),(va)&&t.css(f)}else e.controls.parentElement.removeAttribute("style")})}},{key:"showData",value:function(e){var t=this.data,n=w.default.escapeHtml(t.formData),r=A("code",n,{className:"formData-"+O.config.opts.dataType});this.dialog(A("pre",r),null,"data-dialog")}},{key:"removeField",value:function(e){var t=!1,n=this,r=this.d.stage,o=r.getElementsByClassName("form-field");if(!o.length)return console.warn("No fields to remove"),!1;if(!e){var i=[].slice.call(o).map(function(e){return e.id});console.warn("fieldID required to remove specific fields. Removing last field since no ID was supplied."),console.warn("Available IDs: "+i.join(", ")),e=r.lastChild.id}var a=document.getElementById(e),s=$(a);return a?(s.slideUp(250,function(){if(s.removeClass("deleting"),s.remove(),t=!0,n.save(),!r.childNodes.length){var e=r.parentElement;e.classList.add("empty"),e.dataset.content=E.default.current.getStarted}}),document.dispatchEvent(j.default.fieldRemoved),t):(console.warn("Field not found"),!1)}},{key:"processActionButtons",value:function(e){var t=e.label,n=e.events,r=(0,i.default)(e,["label","events"]),o=this.data;t=t?E.default.current[t]||"":r.id?E.default.current[r.id]||w.default.capitalize(r.id):"",r.id?r.id=o.formID+"-"+r.id+"-action":r.id=o.formID+"-action-"+Math.round(1e3*Math.random());var a=A("button",t,r);if(n){var s=function(e){n.hasOwnProperty(e)&&a.addEventListener(e,function(t){return n[e](t)})};for(var l in n)s(l)}return a}},{key:"processSubtypes",value:function(e){var t={},n=function(e){return{label:E.default.get(e),value:e}};O.config.subtypes=w.default.merge(b.defaultSubtypes,e);for(var r in O.config.subtypes)O.config.subtypes.hasOwnProperty(r)&&(t[r]=O.config.subtypes[r].map(n));return t}},{key:"editorUI",value:function(e){var t=this.d,n=this.data;t.stage=A("ul",null,{id:n.formID,className:"frmb"}),t.controls=A("ul",null,{id:n.formID+"-control-box",className:"frmb-control"})}},{key:"processOptions",value:function(e){var t=this,n=e.fields,r=void 0===n?[]:n,o=e.templates,a=(0,i.default)(e,["fields","templates"]),l=[{id:"clear",className:"clear-all btn btn-danger",events:{click:t.confirmRemoveAll.bind(t)}},{label:"viewJSON",id:"data",className:"btn btn-default",events:{click:t.showData.bind(t)}},{id:"save",type:"button",className:"btn btn-primary save-template",events:{click:function(e){t.save(),O.config.opts.onSave(e,t.data.formData)}}}],u=[{label:E.default.get("autocomplete"),attrs:{type:"autocomplete"}},{label:E.default.get("button"),attrs:{type:"button"}},{label:E.default.get("checkboxGroup"),attrs:{type:"checkbox-group"}},{label:E.default.get("dateField"),attrs:{type:"date"}},{label:E.default.get("fileUpload"),attrs:{type:"file"}},{label:E.default.get("header"),attrs:{type:"header"}},{label:E.default.get("hidden"),attrs:{type:"hidden"}},{label:E.default.get("number"),attrs:{type:"number"}},{label:E.default.get("paragraph"),attrs:{type:"paragraph"}},{label:E.default.get("radioGroup"),attrs:{type:"radio-group"}},{label:E.default.get("select"), +attrs:{type:"select"}},{label:E.default.get("text"),attrs:{type:"text"}},{label:E.default.get("textArea"),attrs:{type:"textarea"}}];a.fields=r.concat(u),O.config.opts=(0,s.default)({},{actionButtons:l,templates:o,fields:r},a);var f=(0,c.default)(O.config.opts.templates).map(function(e){return[e,O.config.opts.templates[e]]});return w.default.templates=w.default.templates.concat(f),O.config.opts}}]),e}();n.default=T},{"./config":128,"./data":129,"./dom":130,"./events":131,"./utils":135,"babel-runtime/core-js/object/assign":5,"babel-runtime/core-js/object/keys":7,"babel-runtime/helpers/asyncToGenerator":11,"babel-runtime/helpers/classCallCheck":12,"babel-runtime/helpers/createClass":13,"babel-runtime/helpers/objectWithoutProperties":14,"babel-runtime/regenerator":18,mi18n:124}],134:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(){"remove"in Element.prototype||(Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)}),"function"!=typeof Event&&!function(){window.Event=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!0),t}}(),"function"!=typeof a.default&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");e=Object(e);for(var t=1;t>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(t=arguments[1]),n=0;n1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=g.contentType(t),o=n.events,i=(0,h.default)(n,["events"]),a=document.createElement(e),s={string:function(e){a.innerHTML+=e},object:function(e){var t=e.tag,n=e.content,r=(0,h.default)(e,["tag","content"]);return a.appendChild(g.markup(t,n,r))},node:function(e){return a.appendChild(e)},array:function(e){for(var t=0;t":">"},n=function(e){return t[e]||e};return"string"==typeof e?e.replace(/["&<>]/g,n):e},g.escapeAttrs=function(e){for(var t in e)e.hasOwnProperty(t)&&(e[t]=g.escapeAttr(e[t]));return e},g.forEach=function(e,t,n){for(var r=0;r-1&&t.splice(n,1)},g.makeLabel=function(e){var t=e.label,n=void 0===t?"":t,r=e.description,o=void 0===r?"":r,i=(0,h.default)(e,["label","description"]),a=g.parsedHtml(n),s=[a];i.required&&s.push(_("span"," *",{className:"fb-required"})),"hidden"!==i.type&&o&&s.push(_("span","?",{className:"tooltip-element",tooltip:o}));var l={className:"fb-"+i.type+"-label"};return i.id&&(l.for=i.id),_("label",s,l)},g.templateMap=function(e){var t=void 0,n=g.templates,r=!0,o=!1,i=void 0;try{for(var a,s=(0,f.default)(n);!(r=(a=s.next()).done);r=!0){var l=a.value,c=(0,p.default)(l,2),u=c[0],d=c[1];if(Array.isArray(u)){if(g.inArray(e,u)){t=d;break}}else if(e===u){t=d;break}}}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return t},g.autocompleteTemplate=function(e){var t=e.values,n=e.type,r=(0,h.default)(e,["values","type"]),o=function(e){var t=e.target.nextSibling.nextSibling,n=t.getElementsByClassName("active-option")[0],r=[[38,function(){n&&n.previousSibling&&(n.classList.remove("active-option"),n=n.previousSibling,n.classList.add("active-option"))}],[40,function(){n?n.nextSibling&&(n.classList.remove("active-option"),n=n.nextSibling,n.classList.add("active-option")):(n=t.firstChild,n.classList.add("active-option"))}],[13,function(){n&&(e.target.value=n.innerHTML,"none"===t.style.display?t.style.display="block":t.style.display="none")}]],o=new c.default(r),i=o.get(e.keyCode);return i||(i=function(){return!1}),i()},i={focus:function(e){var t=e.target.nextSibling.nextSibling;e.target.addEventListener("keydown",o),t.style.display="block",t.style.width=t.parentElement.offsetWidth+"px"},blur:function(e){e.target.removeEventListener("keydown",o),setTimeout(function(){e.target.nextSibling.nextSibling.style.display="none"},200)},input:function(e){var t=e.target.nextSibling.nextSibling;(0,b.filter)(t.querySelectorAll("li"),e.target.value),e.target.value?t.style.display="block":t.style.display="none"}},a=(0,s.default)({},r,{id:r.id+"-input",events:i}),l=(0,s.default)({},r,{type:"hidden"});delete a.name;var u=[_("input",null,a),_("input",null,l)],f=t.map(function(e){var t=e.label,n={events:{click:function(t){var n=t.target.parentElement,r=n.previousSibling.previousSibling;r.value=e.label,r.previousSibling.value=e.value,n.style.display="none"}},value:e.value};return _("li",t,n)});u.push(_("ul",f,{id:r.id+"-list",className:"fb-"+n+"-list"}));var d=function(e){};return{field:u,onRender:d}},g.selectTemplate=function(e,t){var n=[],r=e.values,o=e.type,i=e.inline,a=e.other,l=e.toggle,c=(0,h.default)(e,["values","type","inline","other","toggle"]),u=g.processFieldDataAttrs(c,t),f=o.replace("-group",""),d="select"===o;if(r){u.placeholder&&d&&n.push(_("option",u.placeholder,{disabled:null,selected:null}));for(var p=0;p1&&void 0!==arguments[1]?arguments[1]:"js",n=!1,r=window.fbLoaded[t];return n=Array.isArray(e)?e.every(function(e){return g.inArray(e,r)}):g.inArray(e,r)},g.getStyles=function(e,t){if(!g.isCached(e,"css")){var n=function(e){var t=document.createElement("link");t.type="text/css",t.rel="stylesheet",t.href=e,document.head.appendChild(t),window.fbLoaded.css.push(e)};e.forEach(function(e){return n((t||"")+e)})}},g.longTextTemplate=function(e){var t=e.value,n=void 0===t?"":t,r=(0,h.default)(e,["value"]),o={field:_("textarea",g.parsedHtml(n),r)},i={tinymce:{js:["//cdn.tinymce.com/4/tinymce.min.js"],onRender:function(t){window.tinymce.editors[e.id]&&window.tinymce.editors[e.id].remove(),window.tinymce.init({target:o.field,height:250,plugins:["advlist autolink lists link image charmap print preview anchor","searchreplace visualblocks code fullscreen","insertdatetime media table contextmenu paste code"],toolbar:"insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"})}},quill:{js:["//cdn.quilljs.com/1.1.3/quill.js"],css:["//cdn.quilljs.com/1.1.3/quill.snow.css"],onRender:function(t){var i=window.Quill.import("delta");window.fbEditors.quill[e.id]={};var a=window.fbEditors.quill[e.id];a.instance=new window.Quill(o.field,{modules:{toolbar:[[{header:[1,2,!1]}],["bold","italic","underline"],["code-block"]]},placeholder:r.placeholder||"",theme:"snow"}),a.data=new i,n&&a.instance.setContents(window.JSON.parse(g.parsedHtml(n))),a.instance.on("text-change",function(e){a.data=a.data.compose(e)})}}};"textarea"!==e.type&&(o.onRender=i[e.type].onRender),"quill"===e.type&&(o.field=_("div",null,r));var a=function t(){i[e.type]&&(document.removeEventListener("fieldRendered",t),i[e.type].css&&g.getStyles(i[e.type].css),i[e.type].js&&!g.isCached(i[e.type].js)?g.getScripts(i[e.type].js).done(o.onRender):o.onRender())};return{field:o.field,onRender:a}},g.templates=[["autocomplete",function(e){var t=g.processFieldDataAttrs(e),n=g.makeLabel(e),r=g.autocompleteTemplate(t),o={field:[n,r.field],onRender:r.onRender};return o}],[b.defaultSubtypes.text.concat(["number","file","date"]),function(e){var t=g.processFieldDataAttrs(e),n=g.makeLabel(e),r={field:[n,_("input",null,t)]};return r}],[["paragraph"].concat(b.defaultSubtypes.paragraph),function(e){var t=g.processFieldDataAttrs(e),n={field:[_(e.type,g.parsedHtml(e.label),t)]};return n}],[b.defaultSubtypes.button,function(e){var t=g.processFieldDataAttrs(e),n={field:_("button",e.label,t)};return n}],[["select","checkbox-group","radio-group","checkbox"],function(e){var t=g.makeLabel(e),n=g.selectTemplate(e),r={field:[t,n]};return r}],[["textarea","tinymce","quill"],function(e){var t=g.processFieldDataAttrs(e),n=g.longTextTemplate(t),r=g.makeLabel(e),o={field:[r,n.field],onRender:n.onRender};return o}]],g.processFieldDataAttrs=function(e){var t=(e.label,e.description,e.subtype),n=(0,h.default)(e,["label","description","subtype"]);return n.id||(n.id=n.name),t&&(n.type=t),(n.multiple||"checkbox-group"===n.type)&&(n.name=n.name+"[]"),n.required&&(n.required=!0,n["aria-required"]="true"),n},g.getTemplate=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=void 0;t&&(e.name?e.name=e.name+"-preview":e.name=g.nameAttr(e)+"-preview");var r=g.templateMap(e.type);if(r=r?r(e,t):g.defaultField(e,t)(),"hidden"!==e.type){var o={};e.name&&(o.className="fb-"+e.type+" form-group field-"+e.name),n=g.markup("div",r.field,o)}else{var i=g.processFieldDataAttrs(e);n=g.markup("input",null,i)}return r.onRender&&n.addEventListener("fieldRendered",r.onRender),n},g.otherOptionCB=function(e){var t=document.getElementById(e),n=document.getElementById(e+"-value");t.checked?n.style.display="inline-block":n.style.display="none"},g.capitalize=function(e){return e.replace(/\b\w/g,function(e){return e.toUpperCase()})},g.merge=function(e,t){var n=(0,s.default)({},e,t);for(var r in t)n.hasOwnProperty(r)&&(Array.isArray(t[r])?n[r]=Array.isArray(e[r])?g.unique(e[r].concat(t[r])):t[r]:"object"===(0,y.default)(t[r])?n[r]=g.merge(e[r],t[r]):n[r]=t[r]);return n},g.addEventListeners=function(e,t,n){return t.split(" ").forEach(function(t){return e.addEventListener(t,n,!1)})},g.closest=function(e,t){for(var n=t.replace(".","");(e=e.parentElement)&&!e.classList.contains(n););return e},g.noop=function(){return null},g.debounce=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:250,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=void 0;return function(){for(var o=arguments.length,i=Array(o),a=0;a label:not([class='fb-checkbox-label']) { diff --git a/dist/form-builder.js b/dist/form-builder.js index e67c991bc..e57b6b640 100644 --- a/dist/form-builder.js +++ b/dist/form-builder.js @@ -4246,7 +4246,7 @@ var FormBuilder = function FormBuilder(opts, element) { var label = function label(txt) { return ''; }; - var checked = values[name] !== undefined ? 'checked' : ''; + var checked = values[name] ? 'checked' : ''; var input = ' '; var left = []; var right = [input]; @@ -7527,4 +7527,4 @@ utils.forceNumber = function (str) { exports.default = utils; },{"./dom":130,"babel-runtime/core-js/get-iterator":2,"babel-runtime/core-js/map":4,"babel-runtime/core-js/object/assign":5,"babel-runtime/helpers/objectWithoutProperties":14,"babel-runtime/helpers/slicedToArray":15,"babel-runtime/helpers/toConsumableArray":16,"babel-runtime/helpers/typeof":17}]},{},[132]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb20uanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2Zyb20uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2dldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fa2V5b2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21ldGEuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21pY3JvdGFzay5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdGFzay5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmlzLWl0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubWFwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvbWkxOG4vZGlzdC9taTE4bi5taW4uanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS1tb2R1bGUuanMiLCJub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwic3JjL2pzL2NvbmZpZy5qcyIsInNyYy9qcy9kYXRhLmpzIiwic3JjL2pzL2RvbS5qcyIsInNyYy9qcy9ldmVudHMuanMiLCJzcmMvanMvZm9ybS1idWlsZGVyLmpzIiwic3JjL2pzL2hlbHBlcnMuanMiLCJzcmMvanMvcG9seWZpbGxzLmpzIiwic3JjL2pzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7O0FDREE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7O0FDQUE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBOztBQ0ZBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU9BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBOztBQ0FBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QixDQUFWO0FBQ0EsUUFBSSxPQUFKLEVBQWE7QUFDWCxXQUFLLEtBQUwsQ0FBVyxPQUFYLEVBQW9CLElBQXBCO0FBQ0Q7QUFDRixHQWREO0FBZUQsQ0FqQkQ7O0FBbUJBOzs7OztBQUtBLE1BQU0sV0FBTixHQUFvQixZQUFNO0FBQ3hCLE1BQUksY0FBYyxFQUFsQjtBQUNBLEdBQUMsVUFBUyxDQUFULEVBQVk7QUFDWCxRQUFJLDJUQUEyVCxJQUEzVCxDQUFnVSxDQUFoVSxLQUFzVSwwa0RBQTBrRCxJQUExa0QsQ0FBK2tELEVBQUUsTUFBRixDQUFTLENBQVQsRUFBWSxDQUFaLENBQS9rRCxDQUExVSxFQUEwNkQ7QUFDeDZELG9CQUFjLFlBQWQ7QUFDRDtBQUNGLEdBSkQsRUFJRyxVQUFVLFNBQVYsSUFBdUIsVUFBVSxNQUFqQyxJQUEyQyxPQUFPLEtBSnJEO0FBS0EsU0FBTyxXQUFQO0FBQ0QsQ0FSRDs7QUFVQTs7Ozs7O0FBTUEsTUFBTSxhQUFOLEdBQXNCLGVBQU87QUFDM0IsU0FBTyxNQUFNLFVBQU4sQ0FBaUIsSUFBSSxPQUFKLENBQVksYUFBWixFQUEyQixFQUEzQixDQUFqQixDQUFQO0FBQ0QsQ0FGRDs7QUFJQTs7Ozs7O0FBTUEsTUFBTSxRQUFOLEdBQWlCLGVBQU87QUFDdEIsU0FBTyxJQUFJLE9BQUosQ0FBWSxLQUFaLEVBQW1CLEdBQW5CLEVBQXdCLE9BQXhCLENBQWdDLHNCQUFoQyxFQUF3RCxFQUF4RCxFQUE0RCxXQUE1RCxFQUFQO0FBQ0QsQ0FGRDs7QUFJQTs7Ozs7O0FBTUEsTUFBTSxXQUFOLEdBQW9CLGVBQU87QUFDekIsU0FBTyxJQUFJLE9BQUosQ0FBWSxTQUFaLEVBQXVCLEVBQXZCLENBQVA7QUFDRCxDQUZEOztrQkFJZSxLIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2dldC1pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9tYXBcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnblwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2VcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3Byb21pc2UgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9wcm9taXNlXCIpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnZW4gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBuZXcgX3Byb21pc2UyLmRlZmF1bHQoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gc3RlcChrZXksIGFyZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3RlcChcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHN0ZXAoXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGVwKFwibmV4dFwiKTtcbiAgICB9KTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZpbmVQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAob2JqLCBrZXlzKSB7XG4gIHZhciB0YXJnZXQgPSB7fTtcblxuICBmb3IgKHZhciBpIGluIG9iaikge1xuICAgIGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7XG4gICAgdGFyZ2V0W2ldID0gb2JqW2ldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfaXNJdGVyYWJsZTIgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9pcy1pdGVyYWJsZVwiKTtcblxudmFyIF9pc0l0ZXJhYmxlMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzSXRlcmFibGUyKTtcblxudmFyIF9nZXRJdGVyYXRvcjIgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9nZXQtaXRlcmF0b3JcIik7XG5cbnZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SXRlcmF0b3IyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkge1xuICAgIHZhciBfYXJyID0gW107XG4gICAgdmFyIF9uID0gdHJ1ZTtcbiAgICB2YXIgX2QgPSBmYWxzZTtcbiAgICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgX2kgPSAoMCwgX2dldEl0ZXJhdG9yMy5kZWZhdWx0KShhcnIpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gdHJ1ZTtcbiAgICAgIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gX2FycjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXNJdGVyYWJsZTMuZGVmYXVsdCkoT2JqZWN0KGFycikpKSB7XG4gICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICB9XG4gIH07XG59KCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZnJvbSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL2FycmF5L2Zyb21cIik7XG5cbnZhciBfZnJvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mcm9tKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgYXJyMltpXSA9IGFycltpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKDAsIF9mcm9tMi5kZWZhdWx0KShhcnIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2l0ZXJhdG9yID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yXCIpO1xuXG52YXIgX2l0ZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2l0ZXJhdG9yKTtcblxudmFyIF9zeW1ib2wgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9zeW1ib2xcIik7XG5cbnZhciBfc3ltYm9sMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N5bWJvbCk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgX2l0ZXJhdG9yMi5kZWZhdWx0ID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZihfaXRlcmF0b3IyLmRlZmF1bHQpID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59IDogZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLkFycmF5LmZyb207IiwicmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvcicpOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvY29yZS5pcy1pdGVyYWJsZScpOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5tYXAnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKS5NYXA7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmFzc2lnbjsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2Mpe1xuICByZXR1cm4gJE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5rZXlzOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKS5Qcm9taXNlOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuU3ltYm9sOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX3drcy1leHQnKS5mKCdpdGVyYXRvcicpOyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICBpZih0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpe1xuICBpZighKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSl7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59OyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKCFpc09iamVjdChpdCkpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59OyIsInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXIsIElURVJBVE9SKXtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9MZW5ndGggID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCB0b0luZGV4ICAgPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihJU19JTkNMVURFUyl7XG4gIHJldHVybiBmdW5jdGlvbigkdGhpcywgZWwsIGZyb21JbmRleCl7XG4gICAgdmFyIE8gICAgICA9IHRvSU9iamVjdCgkdGhpcylcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IHRvSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpXG4gICAgICAsIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICBpZihJU19JTkNMVURFUyAmJiBlbCAhPSBlbCl3aGlsZShsZW5ndGggPiBpbmRleCl7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICBpZih2YWx1ZSAhPSB2YWx1ZSlyZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSN0b0luZGV4IGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvcig7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspaWYoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTyl7XG4gICAgICBpZihPW2luZGV4XSA9PT0gZWwpcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTsiLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIElPYmplY3QgID0gcmVxdWlyZSgnLi9faW9iamVjdCcpXG4gICwgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCBhc2MgICAgICA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFRZUEUsICRjcmVhdGUpe1xuICB2YXIgSVNfTUFQICAgICAgICA9IFRZUEUgPT0gMVxuICAgICwgSVNfRklMVEVSICAgICA9IFRZUEUgPT0gMlxuICAgICwgSVNfU09NRSAgICAgICA9IFRZUEUgPT0gM1xuICAgICwgSVNfRVZFUlkgICAgICA9IFRZUEUgPT0gNFxuICAgICwgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNlxuICAgICwgTk9fSE9MRVMgICAgICA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYXG4gICAgLCBjcmVhdGUgICAgICAgID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbigkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCl7XG4gICAgdmFyIE8gICAgICA9IHRvT2JqZWN0KCR0aGlzKVxuICAgICAgLCBzZWxmICAgPSBJT2JqZWN0KE8pXG4gICAgICAsIGYgICAgICA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKVxuICAgICAgLCBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aClcbiAgICAgICwgaW5kZXggID0gMFxuICAgICAgLCByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkXG4gICAgICAsIHZhbCwgcmVzO1xuICAgIGZvcig7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspaWYoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZil7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZihUWVBFKXtcbiAgICAgICAgaWYoSVNfTUFQKXJlc3VsdFtpbmRleF0gPSByZXM7ICAgICAgICAgICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYocmVzKXN3aXRjaChUWVBFKXtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmKElTX0VWRVJZKXJldHVybiBmYWxzZTsgICAgICAgICAgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBpc0FycmF5ICA9IHJlcXVpcmUoJy4vX2lzLWFycmF5JylcbiAgLCBTUEVDSUVTICA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3JpZ2luYWwpe1xuICB2YXIgQztcbiAgaWYoaXNBcnJheShvcmlnaW5hbCkpe1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSlDID0gdW5kZWZpbmVkO1xuICAgIGlmKGlzT2JqZWN0KEMpKXtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYoQyA9PT0gbnVsbClDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTsiLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsLCBsZW5ndGgpe1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTsiLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpXG4gICwgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJylcbiAgLy8gRVMzIHdyb25nIGhlcmVcbiAgLCBBUkcgPSBjb2YoZnVuY3Rpb24oKXsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbihpdCwga2V5KXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59OyIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZlxuICAsIGNyZWF0ZSAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpXG4gICwgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKVxuICAsIGN0eCAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBhbkluc3RhbmNlICA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJylcbiAgLCBkZWZpbmVkICAgICA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKVxuICAsIGZvck9mICAgICAgID0gcmVxdWlyZSgnLi9fZm9yLW9mJylcbiAgLCAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJylcbiAgLCBzdGVwICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpXG4gICwgc2V0U3BlY2llcyAgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpXG4gICwgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpXG4gICwgZmFzdEtleSAgICAgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleVxuICAsIFNJWkUgICAgICAgID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbih0aGF0LCBrZXkpe1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpLCBlbnRyeTtcbiAgaWYoaW5kZXggIT09ICdGJylyZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKXtcbiAgICBpZihlbnRyeS5rID09IGtleSlyZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24od3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUil7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRoYXQsIGl0ZXJhYmxlKXtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmKGl0ZXJhYmxlICE9IHVuZGVmaW5lZClmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKXtcbiAgICAgICAgZm9yKHZhciB0aGF0ID0gdGhpcywgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubil7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYoZW50cnkucCllbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbihrZXkpe1xuICAgICAgICB2YXIgdGhhdCAgPSB0aGlzXG4gICAgICAgICAgLCBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmKGVudHJ5KXtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5cbiAgICAgICAgICAgICwgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYocHJldilwcmV2Lm4gPSBuZXh0O1xuICAgICAgICAgIGlmKG5leHQpbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZih0aGF0Ll9mID09IGVudHJ5KXRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmKHRoYXQuX2wgPT0gZW50cnkpdGhhdC5fbCA9IHByZXY7XG4gICAgICAgICAgdGhhdFtTSVpFXS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyosIHRoYXQgPSB1bmRlZmluZWQgKi8pe1xuICAgICAgICBhbkluc3RhbmNlKHRoaXMsIEMsICdmb3JFYWNoJyk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKVxuICAgICAgICAgICwgZW50cnk7XG4gICAgICAgIHdoaWxlKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZil7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZShlbnRyeSAmJiBlbnRyeS5yKWVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KXtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZihERVNDUklQVE9SUylkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiBkZWZpbmVkKHRoaXNbU0laRV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uKHRoYXQsIGtleSwgdmFsdWUpe1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSlcbiAgICAgICwgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYoZW50cnkpe1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYoIXRoYXQuX2YpdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYocHJldilwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYoaW5kZXggIT09ICdGJyl0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbihDLCBOQU1FLCBJU19NQVApe1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbihpdGVyYXRlZCwga2luZCl7XG4gICAgICB0aGlzLl90ID0gaXRlcmF0ZWQ7ICAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7IC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24oKXtcbiAgICAgIHZhciB0aGF0ICA9IHRoaXNcbiAgICAgICAgLCBraW5kICA9IHRoYXQuX2tcbiAgICAgICAgLCBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlKGVudHJ5ICYmIGVudHJ5LnIpZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpe1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZihraW5kID09ICd2YWx1ZXMnKXJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJyAsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59OyIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgZnJvbSAgICA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTkFNRSl7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKXtcbiAgICBpZihjbGFzc29mKHRoaXMpICE9IE5BTUUpdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgbWV0YSAgICAgICAgICAgPSByZXF1aXJlKCcuL19tZXRhJylcbiAgLCBmYWlscyAgICAgICAgICA9IHJlcXVpcmUoJy4vX2ZhaWxzJylcbiAgLCBoaWRlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIHJlZGVmaW5lQWxsICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJylcbiAgLCBmb3JPZiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2Zvci1vZicpXG4gICwgYW5JbnN0YW5jZSAgICAgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpXG4gICwgaXNPYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIGRQICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZlxuICAsIGVhY2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApXG4gICwgREVTQ1JJUFRPUlMgICAgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKXtcbiAgdmFyIEJhc2UgID0gZ2xvYmFsW05BTUVdXG4gICAgLCBDICAgICA9IEJhc2VcbiAgICAsIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJ1xuICAgICwgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlXG4gICAgLCBPICAgICA9IHt9O1xuICBpZighREVTQ1JJUFRPUlMgfHwgdHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24oKXtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSl7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRhcmdldCwgaXRlcmFibGUpe1xuICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUsICdfYycpO1xuICAgICAgdGFyZ2V0Ll9jID0gbmV3IEJhc2U7XG4gICAgICBpZihpdGVyYWJsZSAhPSB1bmRlZmluZWQpZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGFyZ2V0W0FEREVSXSwgdGFyZ2V0KTtcbiAgICB9KTtcbiAgICBlYWNoKCdhZGQsY2xlYXIsZGVsZXRlLGZvckVhY2gsZ2V0LGhhcyxzZXQsa2V5cyx2YWx1ZXMsZW50cmllcyx0b0pTT04nLnNwbGl0KCcsJyksZnVuY3Rpb24oS0VZKXtcbiAgICAgIHZhciBJU19BRERFUiA9IEtFWSA9PSAnYWRkJyB8fCBLRVkgPT0gJ3NldCc7XG4gICAgICBpZihLRVkgaW4gcHJvdG8gJiYgIShJU19XRUFLICYmIEtFWSA9PSAnY2xlYXInKSloaWRlKEMucHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgICBhbkluc3RhbmNlKHRoaXMsIEMsIEtFWSk7XG4gICAgICAgIGlmKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSlyZXR1cm4gS0VZID09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9jW0tFWV0oYSA9PT0gMCA/IDAgOiBhLCBiKTtcbiAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmKCdzaXplJyBpbiBwcm90bylkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiB0aGlzLl9jLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYsIE8pO1xuXG4gIGlmKCFJU19XRUFLKWNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07IiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHt2ZXJzaW9uOiAnMi40LjAnfTtcbmlmKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGNyZWF0ZURlc2MgICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIGluZGV4LCB2YWx1ZSl7XG4gIGlmKGluZGV4IGluIG9iamVjdCkkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTsiLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCB0aGF0LCBsZW5ndGgpe1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZih0aGF0ID09PSB1bmRlZmluZWQpcmV0dXJuIGZuO1xuICBzd2l0Y2gobGVuZ3RoKXtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbihhKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24oYSwgYil7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKGEsIGIsIGMpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oLyogLi4uYXJncyAqLyl7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59OyIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTsiLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywge2dldDogZnVuY3Rpb24oKXsgcmV0dXJuIDc7IH19KS5hICE9IDc7XG59KTsiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnRcbiAgLy8gaW4gb2xkIElFIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnXG4gICwgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07IiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7IiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIGdPUFMgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpXG4gICwgcElFICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgcmVzdWx0ICAgICA9IGdldEtleXMoaXQpXG4gICAgLCBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZihnZXRTeW1ib2xzKXtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpXG4gICAgICAsIGlzRW51bSAgPSBwSUUuZlxuICAgICAgLCBpICAgICAgID0gMFxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUoc3ltYm9scy5sZW5ndGggPiBpKWlmKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKXJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07IiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgY3R4ICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBoaWRlICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBzb3VyY2Upe1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRlxuICAgICwgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuR1xuICAgICwgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuU1xuICAgICwgSVNfUFJPVE8gID0gdHlwZSAmICRleHBvcnQuUFxuICAgICwgSVNfQklORCAgID0gdHlwZSAmICRleHBvcnQuQlxuICAgICwgSVNfV1JBUCAgID0gdHlwZSAmICRleHBvcnQuV1xuICAgICwgZXhwb3J0cyAgID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSlcbiAgICAsIGV4cFByb3RvICA9IGV4cG9ydHNbUFJPVE9UWVBFXVxuICAgICwgdGFyZ2V0ICAgID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXVxuICAgICwga2V5LCBvd24sIG91dDtcbiAgaWYoSVNfR0xPQkFMKXNvdXJjZSA9IG5hbWU7XG4gIGZvcihrZXkgaW4gc291cmNlKXtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmKG93biAmJiBrZXkgaW4gZXhwb3J0cyljb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uKEMpe1xuICAgICAgdmFyIEYgPSBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgICAgaWYodGhpcyBpbnN0YW5jZW9mIEMpe1xuICAgICAgICAgIHN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZihJU19QUk9UTyl7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSloaWRlKGV4cFByb3RvLCBrZXksIG91dCk7XG4gICAgfVxuICB9XG59O1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YCBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTsiLCJ2YXIgY3R4ICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIGNhbGwgICAgICAgID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJylcbiAgLCBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKVxuICAsIGFuT2JqZWN0ICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCB0b0xlbmd0aCAgICA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgZ2V0SXRlckZuICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpXG4gICwgQlJFQUsgICAgICAgPSB7fVxuICAsIFJFVFVSTiAgICAgID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUil7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uKCl7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSlcbiAgICAsIGYgICAgICA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKVxuICAgICwgaW5kZXggID0gMFxuICAgICwgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZih0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZihpc0FycmF5SXRlcihpdGVyRm4pKWZvcihsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvcihpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyApe1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07IiwidmFyIGRQICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OyIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7IiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCBhcmdzLCB0aGF0KXtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2goYXJncy5sZW5ndGgpe1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncyk7XG59OyIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59OyIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCBJVEVSQVRPUiAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07IiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZyl7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07IiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpe1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2goZSl7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZihyZXQgIT09IHVuZGVmaW5lZClhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpXG4gICwgZGVzY3JpcHRvciAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KXtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7bmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KX0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgICAgICAgID0gcmVxdWlyZSgnLi9fbGlicmFyeScpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKVxuICAsIGhpZGUgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIEl0ZXJhdG9ycyAgICAgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCAkaXRlckNyZWF0ZSAgICA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKVxuICAsIElURVJBVE9SICAgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBCVUdHWSAgICAgICAgICA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKSAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gICwgRkZfSVRFUkFUT1IgICAgPSAnQEBpdGVyYXRvcidcbiAgLCBLRVlTICAgICAgICAgICA9ICdrZXlzJ1xuICAsIFZBTFVFUyAgICAgICAgID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKXtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24oa2luZCl7XG4gICAgaWYoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaChraW5kKXtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHICAgICAgICA9IE5BTUUgKyAnIEl0ZXJhdG9yJ1xuICAgICwgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTXG4gICAgLCBWQUxVRVNfQlVHID0gZmFsc2VcbiAgICAsIHByb3RvICAgICAgPSBCYXNlLnByb3RvdHlwZVxuICAgICwgJG5hdGl2ZSAgICA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXVxuICAgICwgJGRlZmF1bHQgICA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpXG4gICAgLCAkZW50cmllcyAgID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZFxuICAgICwgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmVcbiAgICAsIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYoJGFueU5hdGl2ZSl7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UpKTtcbiAgICBpZihJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSl7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYoIUxJQlJBUlkgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKWhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZihERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpe1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKXtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddICA9IHJldHVyblRoaXM7XG4gIGlmKERFRkFVTFQpe1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6ICBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6ICAgIElTX1NFVCAgICAgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZihGT1JDRUQpZm9yKGtleSBpbiBtZXRob2RzKXtcbiAgICAgIGlmKCEoa2V5IGluIHByb3RvKSlyZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59OyIsInZhciBJVEVSQVRPUiAgICAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uKCl7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uKCl7IHRocm93IDI7IH0pO1xufSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMsIHNraXBDbG9zaW5nKXtcbiAgaWYoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgID0gWzddXG4gICAgICAsIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24oKXsgcmV0dXJuIHtkb25lOiBzYWZlID0gdHJ1ZX07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uKCl7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkb25lLCB2YWx1ZSl7XG4gIHJldHVybiB7dmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmV9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHt9OyIsInZhciBnZXRLZXlzICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIGVsKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBrZXlzICAgPSBnZXRLZXlzKE8pXG4gICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICwgaW5kZXggID0gMFxuICAgICwga2V5O1xuICB3aGlsZShsZW5ndGggPiBpbmRleClpZihPW2tleSA9IGtleXNbaW5kZXgrK11dID09PSBlbClyZXR1cm4ga2V5O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7IiwidmFyIE1FVEEgICAgID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKVxuICAsIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBoYXMgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgc2V0RGVzYyAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgaWQgICAgICAgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24oaXQpe1xuICBzZXREZXNjKGl0LCBNRVRBLCB7dmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9fSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbihpdCwgY3JlYXRlKXtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZighaXNPYmplY3QoaXQpKXJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmKCFoYXMoaXQsIE1FVEEpKXtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZighY3JlYXRlKXJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24oaXQsIGNyZWF0ZSl7XG4gIGlmKCFoYXMoaXQsIE1FVEEpKXtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYoIWNyZWF0ZSlyZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKXNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiAgICAgIE1FVEEsXG4gIE5FRUQ6ICAgICBmYWxzZSxcbiAgZmFzdEtleTogIGZhc3RLZXksXG4gIGdldFdlYWs6ICBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07IiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldFxuICAsIE9ic2VydmVyICA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyXG4gICwgcHJvY2VzcyAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBQcm9taXNlICAgPSBnbG9iYWwuUHJvbWlzZVxuICAsIGlzTm9kZSAgICA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpe1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZShoZWFkKXtcbiAgICAgIGZuICAgPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoKGUpe1xuICAgICAgICBpZihoZWFkKW5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmKHBhcmVudClwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmKGlzTm9kZSl7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlclxuICB9IGVsc2UgaWYoT2JzZXJ2ZXIpe1xuICAgIHZhciB0b2dnbGUgPSB0cnVlXG4gICAgICAsIG5vZGUgICA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpe1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGZuKXtcbiAgICB2YXIgdGFzayA9IHtmbjogZm4sIG5leHQ6IHVuZGVmaW5lZH07XG4gICAgaWYobGFzdClsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmKCFoZWFkKXtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIGdldEtleXMgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIGdPUFMgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKVxuICAsIHBJRSAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpXG4gICwgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIElPYmplY3QgID0gcmVxdWlyZSgnLi9faW9iamVjdCcpXG4gICwgJGFzc2lnbiAgPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICB2YXIgQSA9IHt9XG4gICAgLCBCID0ge31cbiAgICAsIFMgPSBTeW1ib2woKVxuICAgICwgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uKGspeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUICAgICA9IHRvT2JqZWN0KHRhcmdldClcbiAgICAsIGFMZW4gID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgaW5kZXggPSAxXG4gICAgLCBnZXRTeW1ib2xzID0gZ09QUy5mXG4gICAgLCBpc0VudW0gICAgID0gcElFLmY7XG4gIHdoaWxlKGFMZW4gPiBpbmRleCl7XG4gICAgdmFyIFMgICAgICA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKVxuICAgICAgLCBrZXlzICAgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpXG4gICAgICAsIGxlbmd0aCA9IGtleXMubGVuZ3RoXG4gICAgICAsIGogICAgICA9IDBcbiAgICAgICwga2V5O1xuICAgIHdoaWxlKGxlbmd0aCA+IGopaWYoaXNFbnVtLmNhbGwoUywga2V5ID0ga2V5c1tqKytdKSlUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjsiLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgZFBzICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJylcbiAgLCBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKVxuICAsIElFX1BST1RPICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpXG4gICwgRW1wdHkgICAgICAgPSBmdW5jdGlvbigpeyAvKiBlbXB0eSAqLyB9XG4gICwgUFJPVE9UWVBFICAgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbigpe1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKVxuICAgICwgaSAgICAgID0gZW51bUJ1Z0tleXMubGVuZ3RoXG4gICAgLCBsdCAgICAgPSAnPCdcbiAgICAsIGd0ICAgICA9ICc+J1xuICAgICwgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUoaS0tKWRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKXtcbiAgdmFyIHJlc3VsdDtcbiAgaWYoTyAhPT0gbnVsbCl7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBkUCAgICAgICAgICAgICA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpe1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgaWYoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKXRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmKCd2YWx1ZScgaW4gQXR0cmlidXRlcylPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59OyIsInZhciBkUCAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGdldEtleXMgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpe1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgICA9IGdldEtleXMoUHJvcGVydGllcylcbiAgICAsIGxlbmd0aCA9IGtleXMubGVuZ3RoXG4gICAgLCBpID0gMFxuICAgICwgUDtcbiAgd2hpbGUobGVuZ3RoID4gaSlkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07IiwidmFyIHBJRSAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpXG4gICwgY3JlYXRlRGVzYyAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJylcbiAgLCB0b0lPYmplY3QgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpXG4gICwgZ09QRCAgICAgICAgICAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKXtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZihJRThfRE9NX0RFRklORSl0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIGlmKGhhcyhPLCBQKSlyZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59OyIsIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCBnT1BOICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmZcbiAgLCB0b1N0cmluZyAgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uKGl0KXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KXtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJylcbiAgLCBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pe1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59OyIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7IiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgdG9PYmplY3QgICAgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIElFX1BST1RPICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpXG4gICwgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbihPKXtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZihoYXMoTywgSUVfUFJPVE8pKXJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcil7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTsiLCJ2YXIgaGFzICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b0lPYmplY3QgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKVxuICAsIElFX1BST1RPICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIG5hbWVzKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwga2V5O1xuICBmb3Ioa2V5IGluIE8paWYoa2V5ICE9IElFX1BST1RPKWhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZihoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpe1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07IiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07IiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7IiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgY29yZSAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIGZhaWxzICAgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihLRVksIGV4ZWMpe1xuICB2YXIgZm4gID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldXG4gICAgLCBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbigpeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGJpdG1hcCwgdmFsdWUpe1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGUgIDogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGUgICAgOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlICAgICAgIDogdmFsdWVcbiAgfTtcbn07IiwidmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHRhcmdldCwgc3JjLCBzYWZlKXtcbiAgZm9yKHZhciBrZXkgaW4gc3JjKXtcbiAgICBpZihzYWZlICYmIHRhcmdldFtrZXldKXRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBoaWRlKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19oaWRlJyk7IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIGRQICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJylcbiAgLCBTUEVDSUVTICAgICA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZKXtcbiAgdmFyIEMgPSB0eXBlb2YgY29yZVtLRVldID09ICdmdW5jdGlvbicgPyBjb3JlW0tFWV0gOiBnbG9iYWxbS0VZXTtcbiAgaWYoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSlkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07IiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBoYXMgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCB0YWcsIHN0YXQpe1xuICBpZihpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKWRlZihpdCwgVEFHLCB7Y29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnfSk7XG59OyIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpXG4gICwgdWlkICAgID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59OyIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nXG4gICwgc3RvcmUgID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihrZXkpe1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHt9KTtcbn07IiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJylcbiAgLCBTUEVDSUVTICAgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihPLCBEKXtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvciwgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTsiLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgZGVmaW5lZCAgID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oVE9fU1RSSU5HKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoYXQsIHBvcyl7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSlcbiAgICAgICwgaSA9IHRvSW50ZWdlcihwb3MpXG4gICAgICAsIGwgPSBzLmxlbmd0aFxuICAgICAgLCBhLCBiO1xuICAgIGlmKGkgPCAwIHx8IGkgPj0gbClyZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTsiLCJ2YXIgY3R4ICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBpbnZva2UgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19pbnZva2UnKVxuICAsIGh0bWwgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2h0bWwnKVxuICAsIGNlbCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKVxuICAsIGdsb2JhbCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBzZXRUYXNrICAgICAgICAgICAgPSBnbG9iYWwuc2V0SW1tZWRpYXRlXG4gICwgY2xlYXJUYXNrICAgICAgICAgID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlXG4gICwgTWVzc2FnZUNoYW5uZWwgICAgID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsXG4gICwgY291bnRlciAgICAgICAgICAgID0gMFxuICAsIHF1ZXVlICAgICAgICAgICAgICA9IHt9XG4gICwgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSdcbiAgLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbigpe1xuICB2YXIgaWQgPSArdGhpcztcbiAgaWYocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKXtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQpe1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZighc2V0VGFzayB8fCAhY2xlYXJUYXNrKXtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbil7XG4gICAgdmFyIGFyZ3MgPSBbXSwgaSA9IDE7XG4gICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24oKXtcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCl7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJyl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYoTWVzc2FnZUNoYW5uZWwpe1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7XG4gICAgcG9ydCAgICA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZihnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKXtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiAgIHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07IiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIG1heCAgICAgICA9IE1hdGgubWF4XG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGluZGV4LCBsZW5ndGgpe1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTsiLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsICA9IE1hdGguY2VpbFxuICAsIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07IiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTsiLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTsiLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07IiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgUyl7XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZih0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07IiwidmFyIGlkID0gMFxuICAsIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07IiwidmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIExJQlJBUlkgICAgICAgID0gcmVxdWlyZSgnLi9fbGlicmFyeScpXG4gICwgd2tzRXh0ICAgICAgICAgPSByZXF1aXJlKCcuL193a3MtZXh0JylcbiAgLCBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG5hbWUpe1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZihuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKWRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHt2YWx1ZTogd2tzRXh0LmYobmFtZSl9KTtcbn07IiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7IiwidmFyIHN0b3JlICAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJylcbiAgLCB1aWQgICAgICAgID0gcmVxdWlyZSgnLi9fdWlkJylcbiAgLCBTeW1ib2wgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sXG4gICwgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7IiwidmFyIGNsYXNzb2YgICA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKVxuICAsIElURVJBVE9SICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgIT0gdW5kZWZpbmVkKXJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07IiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBnZXQgICAgICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvciA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIGl0ZXJGbiA9IGdldChpdCk7XG4gIGlmKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgcmV0dXJuIGFuT2JqZWN0KGl0ZXJGbi5jYWxsKGl0KSk7XG59OyIsInZhciBjbGFzc29mICAgPSByZXF1aXJlKCcuL19jbGFzc29mJylcbiAgLCBJVEVSQVRPUiAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIE8gPSBPYmplY3QoaXQpO1xuICByZXR1cm4gT1tJVEVSQVRPUl0gIT09IHVuZGVmaW5lZFxuICAgIHx8ICdAQGl0ZXJhdG9yJyBpbiBPXG4gICAgfHwgSXRlcmF0b3JzLmhhc093blByb3BlcnR5KGNsYXNzb2YoTykpO1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCB0b09iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgY2FsbCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKVxuICAsIGlzQXJyYXlJdGVyICAgID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpXG4gICwgdG9MZW5ndGggICAgICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5JylcbiAgLCBnZXRJdGVyRm4gICAgICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24oaXRlcil7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UvKiwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQqLyl7XG4gICAgdmFyIE8gICAgICAgPSB0b09iamVjdChhcnJheUxpa2UpXG4gICAgICAsIEMgICAgICAgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5XG4gICAgICAsIGFMZW4gICAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAsIG1hcGZuICAgPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICAgLCBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZFxuICAgICAgLCBpbmRleCAgID0gMFxuICAgICAgLCBpdGVyRm4gID0gZ2V0SXRlckZuKE8pXG4gICAgICAsIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZihtYXBwaW5nKW1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpe1xuICAgICAgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4Kyspe1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvcihyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpXG4gICwgc3RlcCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpXG4gICwgSXRlcmF0b3JzICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgdG9JT2JqZWN0ICAgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbihpdGVyYXRlZCwga2luZCl7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24oKXtcbiAgdmFyIE8gICAgID0gdGhpcy5fdFxuICAgICwga2luZCAgPSB0aGlzLl9rXG4gICAgLCBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpe1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYoa2luZCA9PSAna2V5cycgIClyZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmKGtpbmQgPT0gJ3ZhbHVlcycpcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpOyIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyAyMy4xIE1hcCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKSgnTWFwJywgZnVuY3Rpb24oZ2V0KXtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpe1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKXtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7IiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0Jywge2Fzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpfSk7IiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0Jywge2RlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mfSk7IiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsICRrZXlzICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpe1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7IiwiIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsIGdsb2JhbCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY3R4ICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBjbGFzc29mICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jbGFzc29mJylcbiAgLCAkZXhwb3J0ICAgICAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGlzT2JqZWN0ICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgYUZ1bmN0aW9uICAgICAgICAgID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpXG4gICwgYW5JbnN0YW5jZSAgICAgICAgID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKVxuICAsIGZvck9mICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2Zvci1vZicpXG4gICwgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpXG4gICwgdGFzayAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldFxuICAsIG1pY3JvdGFzayAgICAgICAgICA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKClcbiAgLCBQUk9NSVNFICAgICAgICAgICAgPSAnUHJvbWlzZSdcbiAgLCBUeXBlRXJyb3IgICAgICAgICAgPSBnbG9iYWwuVHlwZUVycm9yXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCAkUHJvbWlzZSAgICAgICAgICAgPSBnbG9iYWxbUFJPTUlTRV1cbiAgLCBwcm9jZXNzICAgICAgICAgICAgPSBnbG9iYWwucHJvY2Vzc1xuICAsIGlzTm9kZSAgICAgICAgICAgICA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnXG4gICwgZW1wdHkgICAgICAgICAgICAgID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfVxuICAsIEludGVybmFsLCBHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbigpe1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlICAgICA9ICRQcm9taXNlLnJlc29sdmUoMSlcbiAgICAgICwgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uKGV4ZWMpeyBleGVjKGVtcHR5LCBlbXB0eSk7IH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJykgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBzYW1lQ29uc3RydWN0b3IgPSBmdW5jdGlvbihhLCBiKXtcbiAgLy8gd2l0aCBsaWJyYXJ5IHdyYXBwZXIgc3BlY2lhbCBjYXNlXG4gIHJldHVybiBhID09PSBiIHx8IGEgPT09ICRQcm9taXNlICYmIGIgPT09IFdyYXBwZXI7XG59O1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbihpdCl7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24oQyl7XG4gIHJldHVybiBzYW1lQ29uc3RydWN0b3IoJFByb21pc2UsIEMpXG4gICAgPyBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICA6IG5ldyBHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24oQyl7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uKCQkcmVzb2x2ZSwgJCRyZWplY3Qpe1xuICAgIGlmKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ICA9IGFGdW5jdGlvbihyZWplY3QpO1xufTtcbnZhciBwZXJmb3JtID0gZnVuY3Rpb24oZXhlYyl7XG4gIHRyeSB7XG4gICAgZXhlYygpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB7ZXJyb3I6IGV9O1xuICB9XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uKHByb21pc2UsIGlzUmVqZWN0KXtcbiAgaWYocHJvbWlzZS5fbilyZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24oKXtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92XG4gICAgICAsIG9rICAgID0gcHJvbWlzZS5fcyA9PSAxXG4gICAgICAsIGkgICAgID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24ocmVhY3Rpb24pe1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbFxuICAgICAgICAsIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlXG4gICAgICAgICwgcmVqZWN0ICA9IHJlYWN0aW9uLnJlamVjdFxuICAgICAgICAsIGRvbWFpbiAgPSByZWFjdGlvbi5kb21haW5cbiAgICAgICAgLCByZXN1bHQsIHRoZW47XG4gICAgICB0cnkge1xuICAgICAgICBpZihoYW5kbGVyKXtcbiAgICAgICAgICBpZighb2spe1xuICAgICAgICAgICAgaWYocHJvbWlzZS5faCA9PSAyKW9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGhhbmRsZXIgPT09IHRydWUpcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZihkb21haW4pZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTtcbiAgICAgICAgICAgIGlmKGRvbWFpbilkb21haW4uZXhpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2Upe1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSl7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUoY2hhaW4ubGVuZ3RoID4gaSlydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZihpc1JlamVjdCAmJiAhcHJvbWlzZS5faClvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24ocHJvbWlzZSl7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uKCl7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdlxuICAgICAgLCBhYnJ1cHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYoaXNVbmhhbmRsZWQocHJvbWlzZSkpe1xuICAgICAgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgICBpZihpc05vZGUpe1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbil7XG4gICAgICAgICAgaGFuZGxlcih7cHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZX0pO1xuICAgICAgICB9IGVsc2UgaWYoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcil7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmKGFicnVwdCl0aHJvdyBhYnJ1cHQuZXJyb3I7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICBpZihwcm9taXNlLl9oID09IDEpcmV0dXJuIGZhbHNlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9hIHx8IHByb21pc2UuX2NcbiAgICAsIGkgICAgID0gMFxuICAgICwgcmVhY3Rpb247XG4gIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpe1xuICAgIHJlYWN0aW9uID0gY2hhaW5baSsrXTtcbiAgICBpZihyZWFjdGlvbi5mYWlsIHx8ICFpc1VuaGFuZGxlZChyZWFjdGlvbi5wcm9taXNlKSlyZXR1cm4gZmFsc2U7XG4gIH0gcmV0dXJuIHRydWU7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24ocHJvbWlzZSl7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uKCl7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYoaXNOb2RlKXtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZihoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCl7XG4gICAgICBoYW5kbGVyKHtwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3Z9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24odmFsdWUpe1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmKHByb21pc2UuX2QpcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmKCFwcm9taXNlLl9hKXByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbih2YWx1ZSl7XG4gIHZhciBwcm9taXNlID0gdGhpc1xuICAgICwgdGhlbjtcbiAgaWYocHJvbWlzZS5fZClyZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZihwcm9taXNlID09PSB2YWx1ZSl0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZih0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpe1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciB3cmFwcGVyID0ge193OiBwcm9taXNlLCBfZDogZmFsc2V9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2goZSl7XG4gICAgJHJlamVjdC5jYWxsKHtfdzogcHJvbWlzZSwgX2Q6IGZhbHNlfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmKCFVU0VfTkFUSVZFKXtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKXtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaChlcnIpe1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3Ipe1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG4gICAgICB2YXIgcmVhY3Rpb24gICAgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rICAgICA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCAgID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYodGhpcy5fYSl0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYodGhpcy5fcylub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpe1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24oKXtcbiAgICB2YXIgcHJvbWlzZSAgPSBuZXcgSW50ZXJuYWw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ICA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwge1Byb21pc2U6ICRQcm9taXNlfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpe1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcylcbiAgICAgICwgJCRyZWplY3QgICA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCl7XG4gICAgLy8gaW5zdGFuY2VvZiBpbnN0ZWFkIG9mIGludGVybmFsIHNsb3QgY2hlY2sgYmVjYXVzZSB3ZSBzaG91bGQgZml4IGl0IHdpdGhvdXQgcmVwbGFjZW1lbnQgbmF0aXZlIFByb21pc2UgY29yZVxuICAgIGlmKHggaW5zdGFuY2VvZiAkUHJvbWlzZSAmJiBzYW1lQ29uc3RydWN0b3IoeC5jb25zdHJ1Y3RvciwgdGhpcykpcmV0dXJuIHg7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKVxuICAgICAgLCAkJHJlc29sdmUgID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgICQkcmVzb2x2ZSh4KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24oaXRlcil7XG4gICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKXtcbiAgICB2YXIgQyAgICAgICAgICA9IHRoaXNcbiAgICAgICwgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICAsIHJlc29sdmUgICAgPSBjYXBhYmlsaXR5LnJlc29sdmVcbiAgICAgICwgcmVqZWN0ICAgICA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciBhYnJ1cHQgPSBwZXJmb3JtKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgdmFsdWVzICAgID0gW11cbiAgICAgICAgLCBpbmRleCAgICAgPSAwXG4gICAgICAgICwgcmVtYWluaW5nID0gMTtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24ocHJvbWlzZSl7XG4gICAgICAgIHZhciAkaW5kZXggICAgICAgID0gaW5kZXgrK1xuICAgICAgICAgICwgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgICAgICAgIGlmKGFscmVhZHlDYWxsZWQpcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmKGFicnVwdClyZWplY3QoYWJydXB0LmVycm9yKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpe1xuICAgIHZhciBDICAgICAgICAgID0gdGhpc1xuICAgICAgLCBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgICwgcmVqZWN0ICAgICA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciBhYnJ1cHQgPSBwZXJmb3JtKGZ1bmN0aW9uKCl7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uKHByb21pc2Upe1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZihhYnJ1cHQpcmVqZWN0KGFicnVwdC5lcnJvcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7IiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCAgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbihpdGVyYXRlZCl7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGluZGV4ID0gdGhpcy5faVxuICAgICwgcG9pbnQ7XG4gIGlmKGluZGV4ID49IE8ubGVuZ3RoKXJldHVybiB7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZX07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7dmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZX07XG59KTsiLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBERVNDUklQVE9SUyAgICA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgcmVkZWZpbmUgICAgICAgPSByZXF1aXJlKCcuL19yZWRlZmluZScpXG4gICwgTUVUQSAgICAgICAgICAgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZXG4gICwgJGZhaWxzICAgICAgICAgPSByZXF1aXJlKCcuL19mYWlscycpXG4gICwgc2hhcmVkICAgICAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIHVpZCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fdWlkJylcbiAgLCB3a3MgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3drcycpXG4gICwgd2tzRXh0ICAgICAgICAgPSByZXF1aXJlKCcuL193a3MtZXh0JylcbiAgLCB3a3NEZWZpbmUgICAgICA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKVxuICAsIGtleU9mICAgICAgICAgID0gcmVxdWlyZSgnLi9fa2V5b2YnKVxuICAsIGVudW1LZXlzICAgICAgID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJylcbiAgLCBpc0FycmF5ICAgICAgICA9IHJlcXVpcmUoJy4vX2lzLWFycmF5JylcbiAgLCBhbk9iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9JT2JqZWN0ICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgY3JlYXRlRGVzYyAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJylcbiAgLCBfY3JlYXRlICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIGdPUE5FeHQgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JylcbiAgLCAkR09QRCAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJylcbiAgLCAkRFAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgJGtleXMgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgZ09QRCAgICAgICAgICAgPSAkR09QRC5mXG4gICwgZFAgICAgICAgICAgICAgPSAkRFAuZlxuICAsIGdPUE4gICAgICAgICAgID0gZ09QTkV4dC5mXG4gICwgJFN5bWJvbCAgICAgICAgPSBnbG9iYWwuU3ltYm9sXG4gICwgJEpTT04gICAgICAgICAgPSBnbG9iYWwuSlNPTlxuICAsIF9zdHJpbmdpZnkgICAgID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5XG4gICwgUFJPVE9UWVBFICAgICAgPSAncHJvdG90eXBlJ1xuICAsIEhJRERFTiAgICAgICAgID0gd2tzKCdfaGlkZGVuJylcbiAgLCBUT19QUklNSVRJVkUgICA9IHdrcygndG9QcmltaXRpdmUnKVxuICAsIGlzRW51bSAgICAgICAgID0ge30ucHJvcGVydHlJc0VudW1lcmFibGVcbiAgLCBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5JylcbiAgLCBBbGxTeW1ib2xzICAgICA9IHNoYXJlZCgnc3ltYm9scycpXG4gICwgT1BTeW1ib2xzICAgICAgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKVxuICAsIE9iamVjdFByb3RvICAgID0gT2JqZWN0W1BST1RPVFlQRV1cbiAgLCBVU0VfTkFUSVZFICAgICA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbidcbiAgLCBRT2JqZWN0ICAgICAgICA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbigpe1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7dmFsdWU6IDd9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uKGl0LCBrZXksIEQpe1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYocHJvdG9EZXNjKWRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bylkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHRhZyl7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpe1xuICBpZihpdCA9PT0gT2JqZWN0UHJvdG8pJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYoaGFzKEFsbFN5bWJvbHMsIGtleSkpe1xuICAgIGlmKCFELmVudW1lcmFibGUpe1xuICAgICAgaWYoIWhhcyhpdCwgSElEREVOKSlkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZihoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKWl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwge2VudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCl7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKVxuICAgICwgaSAgICA9IDBcbiAgICAsIGwgPSBrZXlzLmxlbmd0aFxuICAgICwga2V5O1xuICB3aGlsZShsID4gaSkkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKXtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpe1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZih0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSlyZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcbiAgaXQgID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKXJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZihEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHZhciBuYW1lcyAgPSBnT1BOKHRvSU9iamVjdChpdCkpXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwgaSAgICAgID0gMFxuICAgICwga2V5O1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKXtcbiAgICBpZighaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KXtcbiAgdmFyIElTX09QICA9IGl0ID09PSBPYmplY3RQcm90b1xuICAgICwgbmFtZXMgID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwgaSAgICAgID0gMFxuICAgICwga2V5O1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKXtcbiAgICBpZihoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZighVVNFX05BVElWRSl7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKXtcbiAgICBpZih0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCl0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIGlmKHRoaXMgPT09IE9iamVjdFByb3RvKSRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZihERVNDUklQVE9SUyAmJiBzZXR0ZXIpc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7Y29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXR9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCl7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiAgID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5Jykpe1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbihuYW1lKXtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHtTeW1ib2w6ICRTeW1ib2x9KTtcblxuZm9yKHZhciBzeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGkgPSAwOyBzeW1ib2xzLmxlbmd0aCA+IGk7ICl3a3Moc3ltYm9sc1tpKytdKTtcblxuZm9yKHZhciBzeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgaSA9IDA7IHN5bWJvbHMubGVuZ3RoID4gaTsgKXdrc0RlZmluZShzeW1ib2xzW2krK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uKGtleSl7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihrZXkpe1xuICAgIGlmKGlzU3ltYm9sKGtleSkpcmV0dXJuIGtleU9mKFN5bWJvbFJlZ2lzdHJ5LCBrZXkpO1xuICAgIHRocm93IFR5cGVFcnJvcihrZXkgKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uKCl7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uKCl7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHthOiBTfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KXtcbiAgICBpZihpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSlyZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICB2YXIgYXJncyA9IFtpdF1cbiAgICAgICwgaSAgICA9IDFcbiAgICAgICwgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZShhcmd1bWVudHMubGVuZ3RoID4gaSlhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZih0eXBlb2YgcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykkcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICBpZigkcmVwbGFjZXIgfHwgIWlzQXJyYXkocmVwbGFjZXIpKXJlcGxhY2VyID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG4gICAgICBpZigkcmVwbGFjZXIpdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmKCFpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7dG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJyl9KTsiLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTsiLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTsiLCJyZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdsb2JhbCAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGhpZGUgICAgICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCBJdGVyYXRvcnMgICAgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCBUT19TVFJJTkdfVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbmZvcih2YXIgY29sbGVjdGlvbnMgPSBbJ05vZGVMaXN0JywgJ0RPTVRva2VuTGlzdCcsICdNZWRpYUxpc3QnLCAnU3R5bGVTaGVldExpc3QnLCAnQ1NTUnVsZUxpc3QnXSwgaSA9IDA7IGkgPCA1OyBpKyspe1xuICB2YXIgTkFNRSAgICAgICA9IGNvbGxlY3Rpb25zW2ldXG4gICAgLCBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdXG4gICAgLCBwcm90byAgICAgID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYocHJvdG8gJiYgIXByb3RvW1RPX1NUUklOR19UQUddKWhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICBJdGVyYXRvcnNbTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59IiwiLyohXG4gKiBtaTE4biAtIGh0dHBzOi8vZ2l0aHViLmNvbS9EcmFnZ2FibGUvbWkxOG5cbiAqIFZlcnNpb246IDAuMy4zXG4gKiBBdXRob3I6IEtldmluIENoYXBwZWxsIDxrZXZpbi5iLmNoYXBwZWxsQGdtYWlsLmNvbT4gKGh0dHA6Ly9rZXZpbi1jaGFwcGVsbC5jb20pXG4gKi9cbm1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4ocil7aWYoZVtyXSlyZXR1cm4gZVtyXS5leHBvcnRzO3ZhciBvPWVbcl09e2V4cG9ydHM6e30saWQ6cixsb2FkZWQ6ITF9O3JldHVybiB0W3JdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLG4pLG8ubG9hZGVkPSEwLG8uZXhwb3J0c312YXIgZT17fTtyZXR1cm4gbi5tPXQsbi5jPWUsbi5wPVwiZGlzdC9cIixuKDApfShbZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntcImRlZmF1bHRcIjp0fX1PYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbz1lKDU3KSxpPXIobyksdT1lKDUzKSxjPXIodSksZj1lKDU2KSxhPXIoZikscz1lKDQ4KSxsPXIocykscD1lKDU0KSxoPXIocCksdj1lKDU1KSx5PXIodiksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXsoMCxoW1wiZGVmYXVsdFwiXSkodGhpcyx0KTt2YXIgbj17ZXh0ZW5zaW9uOlwiLmxhbmdcIixsb2NhdGlvbjpcImFzc2V0cy9sYW5nL1wiLGxhbmdzOltcImVuLVVTXCJdLGxvY2FsZTpcImVuLVVTXCIscHJlbG9hZGVkOnt9fSxlPXRoaXM7ZS5pbml0PWZ1bmN0aW9uKHQpe3JldHVybiBlLmNvbmZpZz0oMCxsW1wiZGVmYXVsdFwiXSkoe30sbix0KSxlLmxhbmdzPSgwLGxbXCJkZWZhdWx0XCJdKSh7fSxlLmNvbmZpZy5wcmVsb2FkZWQpLGUubG9jYWxlPWUuY29uZmlnLmxvY2FsZXx8ZS5jb25maWcubGFuZ3NbMF0sZS5zZXRDdXJyZW50KGUubG9jYWxlKX19cmV0dXJuKDAseVtcImRlZmF1bHRcIl0pKHQsW3trZXk6XCJnZXRWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmN1cnJlbnQmJnRoaXMuY3VycmVudFt0XXx8dH19LHtrZXk6XCJtYWtlU2FmZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXtcIntcIjpcIlxcXFx7XCIsXCJ9XCI6XCJcXFxcfVwiLFwifFwiOlwiXFxcXHxcIn07cmV0dXJuIHQ9dC5yZXBsYWNlKC9cXHt8XFx9fFxcfC9nLGZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfSksbmV3IFJlZ0V4cCh0LFwiZ1wiKX19LHtrZXk6XCJwdXRcIix2YWx1ZTpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmN1cnJlbnRbdF09bn19LHtrZXk6XCJnZXRcIix2YWx1ZTpmdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMscj10aGlzLmdldFZhbHVlKHQpLG89ci5tYXRjaCgvXFx7W15cXH1dKz9cXH0vZyksaT12b2lkIDA7aWYobiYmbylpZihcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBuP1widW5kZWZpbmVkXCI6KDAsYVtcImRlZmF1bHRcIl0pKG4pKSlmb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKylpPW9bdV0uc3Vic3RyaW5nKDEsb1t1XS5sZW5ndGgtMSkscj1yLnJlcGxhY2UoZS5tYWtlU2FmZShvW3VdKSxuW2ldfHxcIlwiKTtlbHNlIHI9ci5yZXBsYWNlKC9cXHtbXlxcfV0rP1xcfS9nLG4pO3JldHVybiByfX0se2tleTpcImZyb21GaWxlXCIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9dC5zcGxpdChcIlxcblwiKSxyPXt9LG89MDtvPGUubGVuZ3RoO28rKylpZihuPWVbb10ubWF0Y2goL14oLis/KSAqPz0gKj8oW15cXG5dKykvKSl7dmFyIGk9blsyXS5yZXBsYWNlKC9eXFxzK3xcXHMrJC8sXCJcIik7cltuWzFdXT1pfXJldHVybiByfX0se2tleTpcInByb2Nlc3NGaWxlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49dC5yZXBsYWNlKC9cXG5cXG4vZyxcIlxcblwiKTtyZXR1cm4gdGhpcy5mcm9tRmlsZShuKX19LHtrZXk6XCJsb2FkTGFuZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyB3aW5kb3cuUHJvbWlzZShmdW5jdGlvbihlLHIpe24ubGFuZ3NbdF0/ZShuLmxhbmdzW3RdKTohZnVuY3Rpb24oKXt2YXIgbz1uZXcgWE1MSHR0cFJlcXVlc3QsaT1uLmNvbmZpZy5sb2NhdGlvbit0K24uY29uZmlnLmV4dGVuc2lvbjtvLm9wZW4oXCJHRVRcIixpLCEwKSxvLm9ubG9hZD1mdW5jdGlvbigpe2lmKHRoaXMuc3RhdHVzPD0zMDQpe3ZhciBpPW4ucHJvY2Vzc0ZpbGUoby5yZXNwb25zZVRleHQpO24ubGFuZ3NbdF09aSxlKGkpfWVsc2Ugcih7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6by5zdGF0dXNUZXh0fSl9LG8ub25lcnJvcj1mdW5jdGlvbigpe3Ioe3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Om8uc3RhdHVzVGV4dH0pfSxvLnNlbmQoKX0oKX0pfX0se2tleTpcInNldEN1cnJlbnRcIix2YWx1ZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBuPSgwLGNbXCJkZWZhdWx0XCJdKShpW1wiZGVmYXVsdFwiXS5tYXJrKGZ1bmN0aW9uIGUoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06XCJlbi1VU1wiO3JldHVybiBpW1wiZGVmYXVsdFwiXS53cmFwKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLm5leHQ9Mix0aGlzLmxvYWRMYW5nKHQpO2Nhc2UgMjpyZXR1cm4gdGhpcy5sb2NhbGU9dCx0aGlzLmN1cnJlbnQ9dGhpcy5sYW5nc1t0XSxuLmFicnVwdChcInJldHVyblwiLHRoaXMuY3VycmVudCk7Y2FzZSA1OmNhc2VcImVuZFwiOnJldHVybiBuLnN0b3AoKX19LGUsdGhpcyl9KSk7cmV0dXJuIHR9KCl9LHtrZXk6XCJnZXRMYW5nc1wiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmZpZy5sYW5nc319XSksdH0oKTtuW1wiZGVmYXVsdFwiXT1uZXcgZH0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjgpKFwid2tzXCIpLG89ZSgyMSksaT1lKDIpLlN5bWJvbCx1PVwiZnVuY3Rpb25cIj09dHlwZW9mIGksYz10LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHJbdF18fChyW3RdPXUmJmlbdF18fCh1P2k6bykoXCJTeW1ib2wuXCIrdCkpfTtjLnN0b3JlPXJ9LGZ1bmN0aW9uKHQsbil7dmFyIGU9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9ZSl9LGZ1bmN0aW9uKHQsbil7dmFyIGU9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi40LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1lKX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz0hZSgxMikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDYpLG89ZSgzNSksaT1lKDMwKSx1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuLmY9ZSg0KT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxuLGUpe2lmKHIodCksbj1pKG4sITApLHIoZSksbyl0cnl7cmV0dXJuIHUodCxuLGUpfWNhdGNoKGMpe31pZihcImdldFwiaW4gZXx8XCJzZXRcImluIGUpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIGUmJih0W25dPWUudmFsdWUpLHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuKXt2YXIgZT17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg1KSxvPWUoMTkpO3QuZXhwb3J0cz1lKDQpP2Z1bmN0aW9uKHQsbixlKXtyZXR1cm4gci5mKHQsbixvKDEsZSkpfTpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHRbbl09ZSx0fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzYpLG89ZSgyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKG8odCkpfX0sZnVuY3Rpb24odCxuKXt2YXIgZT17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0KS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIpLG89ZSgzKSxpPWUoMTYpLHU9ZSg4KSxjPVwicHJvdG90eXBlXCIsZj1mdW5jdGlvbih0LG4sZSl7dmFyIGEscyxsLHA9dCZmLkYsaD10JmYuRyx2PXQmZi5TLHk9dCZmLlAsZD10JmYuQixnPXQmZi5XLG09aD9vOm9bbl18fChvW25dPXt9KSx3PW1bY10seD1oP3I6dj9yW25dOihyW25dfHx7fSlbY107aCYmKGU9bik7Zm9yKGEgaW4gZSlzPSFwJiZ4JiZ2b2lkIDAhPT14W2FdLHMmJmEgaW4gbXx8KGw9cz94W2FdOmVbYV0sbVthXT1oJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB4W2FdP2VbYV06ZCYmcz9pKGwscik6ZyYmeFthXT09bD9mdW5jdGlvbih0KXt2YXIgbj1mdW5jdGlvbihuLGUscil7aWYodGhpcyBpbnN0YW5jZW9mIHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQobik7Y2FzZSAyOnJldHVybiBuZXcgdChuLGUpfXJldHVybiBuZXcgdChuLGUscil9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gbltjXT10W2NdLG59KGwpOnkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGw/aShGdW5jdGlvbi5jYWxsLGwpOmwseSYmKChtLnZpcnR1YWx8fChtLnZpcnR1YWw9e30pKVthXT1sLHQmZi5SJiZ3JiYhd1thXSYmdSh3LGEsbCkpKX07Zi5GPTEsZi5HPTIsZi5TPTQsZi5QPTgsZi5CPTE2LGYuVz0zMixmLlU9NjQsZi5SPTEyOCx0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKG4pe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz17fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNDApLG89ZSgyNSk7dC5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4gcih0LG8pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7aWYocih0KSx2b2lkIDA9PT1uKXJldHVybiB0O3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobixlKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiB0LmNhbGwobixlLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKGUscixvKXtyZXR1cm4gdC5jYWxsKG4sZSxyLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ITB9LGZ1bmN0aW9uKHQsbil7bi5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTpufX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDUpLmYsbz1lKDcpLGk9ZSgxKShcInRvU3RyaW5nVGFnXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7dCYmIW8odD1lP3Q6dC5wcm90b3R5cGUsaSkmJnIodCxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6bn0pfX0sZnVuY3Rpb24odCxuKXt2YXIgZT0wLHI9TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJTeW1ib2woXCIuY29uY2F0KHZvaWQgMD09PXQ/XCJcIjp0LFwiKV9cIiwoKytlK3IpLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMyksbz1lKDIpLmRvY3VtZW50LGk9cihvKSYmcihvLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1cImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZlwiLnNwbGl0KFwiLFwiKX0sZnVuY3Rpb24odCxuKXtuLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjgpKFwia2V5c1wiKSxvPWUoMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gclt0XXx8KHJbdF09byh0KSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKSxvPVwiX19jb3JlLWpzX3NoYXJlZF9fXCIsaT1yW29dfHwocltvXT17fSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpW3RdfHwoaVt0XT17fSl9fSxmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguY2VpbCxyPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/cjplKSh0KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighcih0KSlyZXR1cm4gdDt2YXIgZSxvO2lmKG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9dC50b1N0cmluZykmJiFyKG89ZS5jYWxsKHQpKSlyZXR1cm4gbztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihlPXQudmFsdWVPZikmJiFyKG89ZS5jYWxsKHQpKSlyZXR1cm4gbztpZighbiYmXCJmdW5jdGlvblwiPT10eXBlb2YoZT10LnRvU3RyaW5nKSYmIXIobz1lLmNhbGwodCkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIpLG89ZSgzKSxpPWUoMTcpLHU9ZSgzMiksYz1lKDUpLmY7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPW8uU3ltYm9sfHwoby5TeW1ib2w9aT97fTpyLlN5bWJvbHx8e30pO1wiX1wiPT10LmNoYXJBdCgwKXx8dCBpbiBufHxjKG4sdCx7dmFsdWU6dS5mKHQpfSl9fSxmdW5jdGlvbih0LG4sZSl7bi5mPWUoMSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEwKSxvPWUoMSkoXCJ0b1N0cmluZ1RhZ1wiKSxpPVwiQXJndW1lbnRzXCI9PXIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSx1PWZ1bmN0aW9uKHQsbil7dHJ5e3JldHVybiB0W25dfWNhdGNoKGUpe319O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbixlLGM7cmV0dXJuIHZvaWQgMD09PXQ/XCJVbmRlZmluZWRcIjpudWxsPT09dD9cIk51bGxcIjpcInN0cmluZ1wiPT10eXBlb2YoZT11KG49T2JqZWN0KHQpLG8pKT9lOmk/cihuKTpcIk9iamVjdFwiPT0oYz1yKG4pKSYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5jYWxsZWU/XCJBcmd1bWVudHNcIjpjfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz1lKDIpLmRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9IWUoNCkmJiFlKDEyKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSgyNCkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTApO3QuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm5cIlN0cmluZ1wiPT1yKHQpP3Quc3BsaXQoXCJcIik6T2JqZWN0KHQpfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMTcpLG89ZSgxMSksaT1lKDQxKSx1PWUoOCksYz1lKDcpLGY9ZSgxNCksYT1lKDcyKSxzPWUoMjApLGw9ZSg4MikscD1lKDEpKFwiaXRlcmF0b3JcIiksaD0hKFtdLmtleXMmJlwibmV4dFwiaW5bXS5rZXlzKCkpLHY9XCJAQGl0ZXJhdG9yXCIseT1cImtleXNcIixkPVwidmFsdWVzXCIsZz1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsbSx3LHgsYil7YShlLG4sbSk7dmFyIF8sTyxqLFM9ZnVuY3Rpb24odCl7aWYoIWgmJnQgaW4gaylyZXR1cm4ga1t0XTtzd2l0Y2godCl7Y2FzZSB5OnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLHQpfTtjYXNlIGQ6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLHQpfX0sRT1uK1wiIEl0ZXJhdG9yXCIsVD13PT1kLFA9ITEsaz10LnByb3RvdHlwZSxMPWtbcF18fGtbdl18fHcmJmtbd10sTT1MfHxTKHcpLEY9dz9UP1MoXCJlbnRyaWVzXCIpOk06dm9pZCAwLE49XCJBcnJheVwiPT1uP2suZW50cmllc3x8TDpMO2lmKE4mJihqPWwoTi5jYWxsKG5ldyB0KSksaiE9PU9iamVjdC5wcm90b3R5cGUmJihzKGosRSwhMCkscnx8YyhqLHApfHx1KGoscCxnKSkpLFQmJkwmJkwubmFtZSE9PWQmJihQPSEwLE09ZnVuY3Rpb24oKXtyZXR1cm4gTC5jYWxsKHRoaXMpfSksciYmIWJ8fCFoJiYhUCYma1twXXx8dShrLHAsTSksZltuXT1NLGZbRV09Zyx3KWlmKF89e3ZhbHVlczpUP006UyhkKSxrZXlzOng/TTpTKHkpLGVudHJpZXM6Rn0sYilmb3IoTyBpbiBfKU8gaW4ga3x8aShrLE8sX1tPXSk7ZWxzZSBvKG8uUCtvLkYqKGh8fFApLG4sXyk7cmV0dXJuIF99fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg2KSxvPWUoNzkpLGk9ZSgyNSksdT1lKDI3KShcIklFX1BST1RPXCIpLGM9ZnVuY3Rpb24oKXt9LGY9XCJwcm90b3R5cGVcIixhPWZ1bmN0aW9uKCl7dmFyIHQsbj1lKDI0KShcImlmcmFtZVwiKSxyPWkubGVuZ3RoLG89XCI8XCIsdT1cIj5cIjtmb3Iobi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGUoMzQpLmFwcGVuZENoaWxkKG4pLG4uc3JjPVwiamF2YXNjcmlwdDpcIix0PW4uY29udGVudFdpbmRvdy5kb2N1bWVudCx0Lm9wZW4oKSx0LndyaXRlKG8rXCJzY3JpcHRcIit1K1wiZG9jdW1lbnQuRj1PYmplY3RcIitvK1wiL3NjcmlwdFwiK3UpLHQuY2xvc2UoKSxhPXQuRjtyLS07KWRlbGV0ZSBhW2ZdW2lbcl1dO3JldHVybiBhKCl9O3QuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LG4pe3ZhciBlO3JldHVybiBudWxsIT09dD8oY1tmXT1yKHQpLGU9bmV3IGMsY1tmXT1udWxsLGVbdV09dCk6ZT1hKCksdm9pZCAwPT09bj9lOm8oZSxuKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDQwKSxvPWUoMjUpLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpO24uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDcpLG89ZSg5KSxpPWUoNjUpKCExKSx1PWUoMjcpKFwiSUVfUFJPVE9cIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIGUsYz1vKHQpLGY9MCxhPVtdO2ZvcihlIGluIGMpZSE9dSYmcihjLGUpJiZhLnB1c2goZSk7Zm9yKDtuLmxlbmd0aD5mOylyKGMsZT1uW2YrK10pJiYofmkoYSxlKXx8YS5wdXNoKGUpKTtyZXR1cm4gYX19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg4KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByLG8saSx1PWUoMTYpLGM9ZSg2OCksZj1lKDM0KSxhPWUoMjQpLHM9ZSgyKSxsPXMucHJvY2VzcyxwPXMuc2V0SW1tZWRpYXRlLGg9cy5jbGVhckltbWVkaWF0ZSx2PXMuTWVzc2FnZUNoYW5uZWwseT0wLGQ9e30sZz1cIm9ucmVhZHlzdGF0ZWNoYW5nZVwiLG09ZnVuY3Rpb24oKXt2YXIgdD0rdGhpcztpZihkLmhhc093blByb3BlcnR5KHQpKXt2YXIgbj1kW3RdO2RlbGV0ZSBkW3RdLG4oKX19LHc9ZnVuY3Rpb24odCl7bS5jYWxsKHQuZGF0YSl9O3AmJmh8fChwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1bXSxlPTE7YXJndW1lbnRzLmxlbmd0aD5lOyluLnB1c2goYXJndW1lbnRzW2UrK10pO3JldHVybiBkWysreV09ZnVuY3Rpb24oKXtjKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSxuKX0scih5KSx5fSxoPWZ1bmN0aW9uKHQpe2RlbGV0ZSBkW3RdfSxcInByb2Nlc3NcIj09ZSgxMCkobCk/cj1mdW5jdGlvbih0KXtsLm5leHRUaWNrKHUobSx0LDEpKX06dj8obz1uZXcgdixpPW8ucG9ydDIsby5wb3J0MS5vbm1lc3NhZ2U9dyxyPXUoaS5wb3N0TWVzc2FnZSxpLDEpKTpzLmFkZEV2ZW50TGlzdGVuZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHBvc3RNZXNzYWdlJiYhcy5pbXBvcnRTY3JpcHRzPyhyPWZ1bmN0aW9uKHQpe3MucG9zdE1lc3NhZ2UodCtcIlwiLFwiKlwiKX0scy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHcsITEpKTpyPWcgaW4gYShcInNjcmlwdFwiKT9mdW5jdGlvbih0KXtmLmFwcGVuZENoaWxkKGEoXCJzY3JpcHRcIikpW2ddPWZ1bmN0aW9uKCl7Zi5yZW1vdmVDaGlsZCh0aGlzKSxtLmNhbGwodCl9fTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHUobSx0LDEpLDApfSksdC5leHBvcnRzPXtzZXQ6cCxjbGVhcjpofX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjkpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhyKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qocih0KSl9fSxmdW5jdGlvbih0LG4pe30sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoODYpKCEwKTtlKDM3KShTdHJpbmcsXCJTdHJpbmdcIixmdW5jdGlvbih0KXt0aGlzLl90PVN0cmluZyh0KSx0aGlzLl9pPTB9LGZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLl90LGU9dGhpcy5faTtyZXR1cm4gZT49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD1yKG4sZSksdGhpcy5faSs9dC5sZW5ndGgse3ZhbHVlOnQsZG9uZTohMX0pfSl9LGZ1bmN0aW9uKHQsbixlKXtlKDg5KTtmb3IodmFyIHI9ZSgyKSxvPWUoOCksaT1lKDE0KSx1PWUoMSkoXCJ0b1N0cmluZ1RhZ1wiKSxjPVtcIk5vZGVMaXN0XCIsXCJET01Ub2tlbkxpc3RcIixcIk1lZGlhTGlzdFwiLFwiU3R5bGVTaGVldExpc3RcIixcIkNTU1J1bGVMaXN0XCJdLGY9MDtmPDU7ZisrKXt2YXIgYT1jW2ZdLHM9clthXSxsPXMmJnMucHJvdG90eXBlO2wmJiFsW3VdJiZvKGwsdSxhKSxpW2FdPWkuQXJyYXl9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPXtcImRlZmF1bHRcIjplKDU4KSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz17XCJkZWZhdWx0XCI6ZSg1OSksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9e1wiZGVmYXVsdFwiOmUoNjApLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPXtcImRlZmF1bHRcIjplKDYxKSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz17XCJkZWZhdWx0XCI6ZSg2MiksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7XCJkZWZhdWx0XCI6dH19bi5fX2VzTW9kdWxlPSEwO3ZhciBvPWUoNTApLGk9cihvKTtuW1wiZGVmYXVsdFwiXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbmV3IGlbXCJkZWZhdWx0XCJdKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihvLHUpe3RyeXt2YXIgYz1uW29dKHUpLGY9Yy52YWx1ZX1jYXRjaChhKXtyZXR1cm4gdm9pZCBlKGEpfXJldHVybiBjLmRvbmU/dm9pZCB0KGYpOmlbXCJkZWZhdWx0XCJdLnJlc29sdmUoZikudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gcihcIm5leHRcIix0KX0sZnVuY3Rpb24odCl7cmV0dXJuIHIoXCJ0aHJvd1wiLHQpfSl9cmV0dXJuIHIoXCJuZXh0XCIpfSl9fX0sZnVuY3Rpb24odCxuKXtcInVzZSBzdHJpY3RcIjtuLl9fZXNNb2R1bGU9ITAsbltcImRlZmF1bHRcIl09ZnVuY3Rpb24odCxuKXtpZighKHQgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntcImRlZmF1bHRcIjp0fX1uLl9fZXNNb2R1bGU9ITA7dmFyIG89ZSg0OSksaT1yKG8pO25bXCJkZWZhdWx0XCJdPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe2Zvcih2YXIgZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgcj1uW2VdO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSwoMCxpW1wiZGVmYXVsdFwiXSkodCxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKG4sZSxyKXtyZXR1cm4gZSYmdChuLnByb3RvdHlwZSxlKSxyJiZ0KG4sciksbn19KCl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7XCJkZWZhdWx0XCI6dH19bi5fX2VzTW9kdWxlPSEwO3ZhciBvPWUoNTIpLGk9cihvKSx1PWUoNTEpLGM9cih1KSxmPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNbXCJkZWZhdWx0XCJdJiZcInN5bWJvbFwiPT10eXBlb2YgaVtcImRlZmF1bHRcIl0/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgY1tcImRlZmF1bHRcIl0mJnQuY29uc3RydWN0b3I9PT1jW1wiZGVmYXVsdFwiXT9cInN5bWJvbFwiOnR5cGVvZiB0fTtuW1wiZGVmYXVsdFwiXT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjW1wiZGVmYXVsdFwiXSYmXCJzeW1ib2xcIj09PWYoaVtcImRlZmF1bHRcIl0pP2Z1bmN0aW9uKHQpe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiB0P1widW5kZWZpbmVkXCI6Zih0KX06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNbXCJkZWZhdWx0XCJdJiZ0LmNvbnN0cnVjdG9yPT09Y1tcImRlZmF1bHRcIl0/XCJzeW1ib2xcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgdD9cInVuZGVmaW5lZFwiOmYodCl9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPWUoOTcpfSxmdW5jdGlvbih0LG4sZSl7ZSg5MCksdC5leHBvcnRzPWUoMykuT2JqZWN0LmFzc2lnbn0sZnVuY3Rpb24odCxuLGUpe2UoOTEpO3ZhciByPWUoMykuT2JqZWN0O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIuZGVmaW5lUHJvcGVydHkodCxuLGUpfX0sZnVuY3Rpb24odCxuLGUpe2UoNDUpLGUoNDYpLGUoNDcpLGUoOTIpLHQuZXhwb3J0cz1lKDMpLlByb21pc2V9LGZ1bmN0aW9uKHQsbixlKXtlKDkzKSxlKDQ1KSxlKDk0KSxlKDk1KSx0LmV4cG9ydHM9ZSgzKS5TeW1ib2x9LGZ1bmN0aW9uKHQsbixlKXtlKDQ2KSxlKDQ3KSx0LmV4cG9ydHM9ZSgzMikuZihcIml0ZXJhdG9yXCIpfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbigpe319LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLHIpe2lmKCEodCBpbnN0YW5jZW9mIG4pfHx2b2lkIDAhPT1yJiZyIGluIHQpdGhyb3cgVHlwZUVycm9yKGUrXCI6IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDkpLG89ZSg0MyksaT1lKDg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSx1KXt2YXIgYyxmPXIobiksYT1vKGYubGVuZ3RoKSxzPWkodSxhKTtpZih0JiZlIT1lKXtmb3IoO2E+czspaWYoYz1mW3MrK10sYyE9YylyZXR1cm4hMH1lbHNlIGZvcig7YT5zO3MrKylpZigodHx8cyBpbiBmKSYmZltzXT09PWUpcmV0dXJuIHR8fHN8fDA7cmV0dXJuIXQmJi0xfX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE1KSxvPWUoMjYpLGk9ZSgxOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPXIodCksZT1vLmY7aWYoZSlmb3IodmFyIHUsYz1lKHQpLGY9aS5mLGE9MDtjLmxlbmd0aD5hOylmLmNhbGwodCx1PWNbYSsrXSkmJm4ucHVzaCh1KTtyZXR1cm4gbn19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE2KSxvPWUoNzEpLGk9ZSg2OSksdT1lKDYpLGM9ZSg0MyksZj1lKDg4KSxhPXt9LHM9e30sbj10LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsbCxwKXt2YXIgaCx2LHksZCxnPXA/ZnVuY3Rpb24oKXtyZXR1cm4gdH06Zih0KSxtPXIoZSxsLG4/MjoxKSx3PTA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZyl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgaXRlcmFibGUhXCIpO2lmKGkoZykpe2ZvcihoPWModC5sZW5ndGgpO2g+dzt3KyspaWYoZD1uP20odSh2PXRbd10pWzBdLHZbMV0pOm0odFt3XSksZD09PWF8fGQ9PT1zKXJldHVybiBkfWVsc2UgZm9yKHk9Zy5jYWxsKHQpOyEodj15Lm5leHQoKSkuZG9uZTspaWYoZD1vKHksbSx2LnZhbHVlLG4pLGQ9PT1hfHxkPT09cylyZXR1cm4gZH07bi5CUkVBSz1hLG4uUkVUVVJOPXN9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlKXt2YXIgcj12b2lkIDA9PT1lO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiByP3QoKTp0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiByP3QoblswXSk6dC5jYWxsKGUsblswXSk7Y2FzZSAyOnJldHVybiByP3QoblswXSxuWzFdKTp0LmNhbGwoZSxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gcj90KG5bMF0sblsxXSxuWzJdKTp0LmNhbGwoZSxuWzBdLG5bMV0sblsyXSk7Y2FzZSA0OnJldHVybiByP3QoblswXSxuWzFdLG5bMl0sblszXSk6dC5jYWxsKGUsblswXSxuWzFdLG5bMl0sblszXSl9cmV0dXJuIHQuYXBwbHkoZSxuKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE0KSxvPWUoMSkoXCJpdGVyYXRvclwiKSxpPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihyLkFycmF5PT09dHx8aVtvXT09PXQpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTApO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PXIodCl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsbyl7dHJ5e3JldHVybiBvP24ocihlKVswXSxlWzFdKTpuKGUpfWNhdGNoKGkpe3ZhciB1PXRbXCJyZXR1cm5cIl07dGhyb3cgdm9pZCAwIT09dSYmcih1LmNhbGwodCkpLGl9fX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMzgpLG89ZSgxOSksaT1lKDIwKSx1PXt9O2UoOCkodSxlKDEpKFwiaXRlcmF0b3JcIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHQuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7dC5wcm90b3R5cGU9cih1LHtuZXh0Om8oMSxlKX0pLGkodCxuK1wiIEl0ZXJhdG9yXCIpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMSkoXCJpdGVyYXRvclwiKSxvPSExO3RyeXt2YXIgaT1bN11bcl0oKTtpW1wicmV0dXJuXCJdPWZ1bmN0aW9uKCl7bz0hMH0sQXJyYXkuZnJvbShpLGZ1bmN0aW9uKCl7dGhyb3cgMn0pfWNhdGNoKHUpe310LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighbiYmIW8pcmV0dXJuITE7dmFyIGU9ITE7dHJ5e3ZhciBpPVs3XSx1PWlbcl0oKTt1Lm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTplPSEwfX0saVtyXT1mdW5jdGlvbigpe3JldHVybiB1fSx0KGkpfWNhdGNoKGMpe31yZXR1cm4gZX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue3ZhbHVlOm4sZG9uZTohIXR9fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTUpLG89ZSg5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGUsaT1vKHQpLHU9cihpKSxjPXUubGVuZ3RoLGY9MDtjPmY7KWlmKGlbZT11W2YrK11dPT09bilyZXR1cm4gZX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIxKShcIm1ldGFcIiksbz1lKDEzKSxpPWUoNyksdT1lKDUpLmYsYz0wLGY9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYT0hZSgxMikoZnVuY3Rpb24oKXtyZXR1cm4gZihPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pLHM9ZnVuY3Rpb24odCl7dSh0LHIse3ZhbHVlOntpOlwiT1wiKyArK2Msdzp7fX19KX0sbD1mdW5jdGlvbih0LG4pe2lmKCFvKHQpKXJldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6KFwic3RyaW5nXCI9PXR5cGVvZiB0P1wiU1wiOlwiUFwiKSt0O2lmKCFpKHQscikpe2lmKCFmKHQpKXJldHVyblwiRlwiO2lmKCFuKXJldHVyblwiRVwiO3ModCl9cmV0dXJuIHRbcl0uaX0scD1mdW5jdGlvbih0LG4pe2lmKCFpKHQscikpe2lmKCFmKHQpKXJldHVybiEwO2lmKCFuKXJldHVybiExO3ModCl9cmV0dXJuIHRbcl0ud30saD1mdW5jdGlvbih0KXtyZXR1cm4gYSYmdi5ORUVEJiZmKHQpJiYhaSh0LHIpJiZzKHQpLHR9LHY9dC5leHBvcnRzPXtLRVk6cixORUVEOiExLGZhc3RLZXk6bCxnZXRXZWFrOnAsb25GcmVlemU6aH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIpLG89ZSg0Mikuc2V0LGk9ci5NdXRhdGlvbk9ic2VydmVyfHxyLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsdT1yLnByb2Nlc3MsYz1yLlByb21pc2UsZj1cInByb2Nlc3NcIj09ZSgxMCkodSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsbixlLGE9ZnVuY3Rpb24oKXt2YXIgcixvO2ZvcihmJiYocj11LmRvbWFpbikmJnIuZXhpdCgpO3Q7KXtvPXQuZm4sdD10Lm5leHQ7dHJ5e28oKX1jYXRjaChpKXt0aHJvdyB0P2UoKTpuPXZvaWQgMCxpfX1uPXZvaWQgMCxyJiZyLmVudGVyKCl9O2lmKGYpZT1mdW5jdGlvbigpe3UubmV4dFRpY2soYSl9O2Vsc2UgaWYoaSl7dmFyIHM9ITAsbD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtuZXcgaShhKS5vYnNlcnZlKGwse2NoYXJhY3RlckRhdGE6ITB9KSxlPWZ1bmN0aW9uKCl7bC5kYXRhPXM9IXN9fWVsc2UgaWYoYyYmYy5yZXNvbHZlKXt2YXIgcD1jLnJlc29sdmUoKTtlPWZ1bmN0aW9uKCl7cC50aGVuKGEpfX1lbHNlIGU9ZnVuY3Rpb24oKXtvLmNhbGwocixhKX07cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvPXtmbjpyLG5leHQ6dm9pZCAwfTtuJiYobi5uZXh0PW8pLHR8fCh0PW8sZSgpKSxuPW99fX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMTUpLG89ZSgyNiksaT1lKDE4KSx1PWUoNDQpLGM9ZSgzNiksZj1PYmplY3QuYXNzaWduO3QuZXhwb3J0cz0hZnx8ZSgxMikoZnVuY3Rpb24oKXt2YXIgdD17fSxuPXt9LGU9U3ltYm9sKCkscj1cImFiY2RlZmdoaWprbG1ub3BxcnN0XCI7cmV0dXJuIHRbZV09NyxyLnNwbGl0KFwiXCIpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT10fSksNyE9Zih7fSx0KVtlXXx8T2JqZWN0LmtleXMoZih7fSxuKSkuam9pbihcIlwiKSE9cn0pP2Z1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXUodCksZj1hcmd1bWVudHMubGVuZ3RoLGE9MSxzPW8uZixsPWkuZjtmPmE7KWZvcih2YXIgcCxoPWMoYXJndW1lbnRzW2ErK10pLHY9cz9yKGgpLmNvbmNhdChzKGgpKTpyKGgpLHk9di5sZW5ndGgsZD0wO3k+ZDspbC5jYWxsKGgscD12W2QrK10pJiYoZVtwXT1oW3BdKTtyZXR1cm4gZX06Zn0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNSksbz1lKDYpLGk9ZSgxNSk7dC5leHBvcnRzPWUoNCk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxuKXtvKHQpO2Zvcih2YXIgZSx1PWkobiksYz11Lmxlbmd0aCxmPTA7Yz5mOylyLmYodCxlPXVbZisrXSxuW2VdKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE4KSxvPWUoMTkpLGk9ZSg5KSx1PWUoMzApLGM9ZSg3KSxmPWUoMzUpLGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtuLmY9ZSg0KT9hOmZ1bmN0aW9uKHQsbil7aWYodD1pKHQpLG49dShuLCEwKSxmKXRyeXtyZXR1cm4gYSh0LG4pfWNhdGNoKGUpe31pZihjKHQsbikpcmV0dXJuIG8oIXIuZi5jYWxsKHQsbiksdFtuXSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg5KSxvPWUoMzkpLmYsaT17fS50b1N0cmluZyx1PVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSxjPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gbyh0KX1jYXRjaChuKXtyZXR1cm4gdS5zbGljZSgpfX07dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIHUmJlwiW29iamVjdCBXaW5kb3ddXCI9PWkuY2FsbCh0KT9jKHQpOm8ocih0KSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg3KSxvPWUoNDQpLGk9ZSgyNykoXCJJRV9QUk9UT1wiKSx1PU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ9byh0KSxyKHQsaSk/dFtpXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P3U6bnVsbH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7Zm9yKHZhciBvIGluIG4pZSYmdFtvXT90W29dPW5bb106cih0LG8sbltvXSk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgyKSxvPWUoMyksaT1lKDUpLHU9ZSg0KSxjPWUoMSkoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBvW3RdP29bdF06clt0XTt1JiZuJiYhbltjXSYmaS5mKG4sYyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNiksbz1lKDIyKSxpPWUoMSkoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlLHU9cih0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09dXx8dm9pZCAwPT0oZT1yKHUpW2ldKT9uOm8oZSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyOSksbz1lKDIzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIGksdSxjPVN0cmluZyhvKG4pKSxmPXIoZSksYT1jLmxlbmd0aDtyZXR1cm4gZjwwfHxmPj1hP3Q/XCJcIjp2b2lkIDA6KGk9Yy5jaGFyQ29kZUF0KGYpLGk8NTUyOTZ8fGk+NTYzMTl8fGYrMT09PWF8fCh1PWMuY2hhckNvZGVBdChmKzEpKTw1NjMyMHx8dT41NzM0Mz90P2MuY2hhckF0KGYpOmk6dD9jLnNsaWNlKGYsZisyKTooaS01NTI5Njw8MTApKyh1LTU2MzIwKSs2NTUzNil9fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjkpLG89TWF0aC5tYXgsaT1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD1yKHQpLHQ8MD9vKHQrbiwwKTppKHQsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgzMyksbz1lKDEpKFwiaXRlcmF0b3JcIiksaT1lKDE0KTt0LmV4cG9ydHM9ZSgzKS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbih0KXtpZih2b2lkIDAhPXQpcmV0dXJuIHRbb118fHRbXCJAQGl0ZXJhdG9yXCJdfHxpW3IodCldfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoNjMpLG89ZSg3NCksaT1lKDE0KSx1PWUoOSk7dC5leHBvcnRzPWUoMzcpKEFycmF5LFwiQXJyYXlcIixmdW5jdGlvbih0LG4pe3RoaXMuX3Q9dSh0KSx0aGlzLl9pPTAsdGhpcy5faz1ufSxmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Qsbj10aGlzLl9rLGU9dGhpcy5faSsrO3JldHVybiF0fHxlPj10Lmxlbmd0aD8odGhpcy5fdD12b2lkIDAsbygxKSk6XCJrZXlzXCI9PW4/bygwLGUpOlwidmFsdWVzXCI9PW4/bygwLHRbZV0pOm8oMCxbZSx0W2VdXSl9LFwidmFsdWVzXCIpLGkuQXJndW1lbnRzPWkuQXJyYXkscihcImtleXNcIikscihcInZhbHVlc1wiKSxyKFwiZW50cmllc1wiKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTEpO3Ioci5TK3IuRixcIk9iamVjdFwiLHthc3NpZ246ZSg3OCl9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTEpO3Ioci5TK3IuRiohZSg0KSxcIk9iamVjdFwiLHtkZWZpbmVQcm9wZXJ0eTplKDUpLmZ9KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByLG8saSx1PWUoMTcpLGM9ZSgyKSxmPWUoMTYpLGE9ZSgzMykscz1lKDExKSxsPWUoMTMpLHA9ZSgyMiksaD1lKDY0KSx2PWUoNjcpLHk9ZSg4NSksZD1lKDQyKS5zZXQsZz1lKDc3KSgpLG09XCJQcm9taXNlXCIsdz1jLlR5cGVFcnJvcix4PWMucHJvY2VzcyxiPWNbbV0seD1jLnByb2Nlc3MsXz1cInByb2Nlc3NcIj09YSh4KSxPPWZ1bmN0aW9uKCl7fSxqPSEhZnVuY3Rpb24oKXt0cnl7dmFyIHQ9Yi5yZXNvbHZlKDEpLG49KHQuY29uc3RydWN0b3I9e30pW2UoMSkoXCJzcGVjaWVzXCIpXT1mdW5jdGlvbih0KXt0KE8sTyl9O3JldHVybihffHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZ0LnRoZW4oTylpbnN0YW5jZW9mIG59Y2F0Y2gocil7fX0oKSxTPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9PT1ufHx0PT09YiYmbj09PWl9LEU9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuISghbCh0KXx8XCJmdW5jdGlvblwiIT10eXBlb2Yobj10LnRoZW4pKSYmbn0sVD1mdW5jdGlvbih0KXtyZXR1cm4gUyhiLHQpP25ldyBQKHQpOm5ldyBvKHQpfSxQPW89ZnVuY3Rpb24odCl7dmFyIG4sZTt0aGlzLnByb21pc2U9bmV3IHQoZnVuY3Rpb24odCxyKXtpZih2b2lkIDAhPT1ufHx2b2lkIDAhPT1lKXRocm93IHcoXCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvclwiKTtuPXQsZT1yfSksdGhpcy5yZXNvbHZlPXAobiksdGhpcy5yZWplY3Q9cChlKX0saz1mdW5jdGlvbih0KXt0cnl7dCgpfWNhdGNoKG4pe3JldHVybntlcnJvcjpufX19LEw9ZnVuY3Rpb24odCxuKXtpZighdC5fbil7dC5fbj0hMDt2YXIgZT10Ll9jO2coZnVuY3Rpb24oKXtmb3IodmFyIHI9dC5fdixvPTE9PXQuX3MsaT0wLHU9ZnVuY3Rpb24obil7dmFyIGUsaSx1PW8/bi5vazpuLmZhaWwsYz1uLnJlc29sdmUsZj1uLnJlamVjdCxhPW4uZG9tYWluO3RyeXt1PyhvfHwoMj09dC5faCYmTih0KSx0Ll9oPTEpLHU9PT0hMD9lPXI6KGEmJmEuZW50ZXIoKSxlPXUociksYSYmYS5leGl0KCkpLGU9PT1uLnByb21pc2U/Zih3KFwiUHJvbWlzZS1jaGFpbiBjeWNsZVwiKSk6KGk9RShlKSk/aS5jYWxsKGUsYyxmKTpjKGUpKTpmKHIpfWNhdGNoKHMpe2Yocyl9fTtlLmxlbmd0aD5pOyl1KGVbaSsrXSk7dC5fYz1bXSx0Ll9uPSExLG4mJiF0Ll9oJiZNKHQpfSl9fSxNPWZ1bmN0aW9uKHQpe2QuY2FsbChjLGZ1bmN0aW9uKCl7dmFyIG4sZSxyLG89dC5fdjtpZihGKHQpJiYobj1rKGZ1bmN0aW9uKCl7Xz94LmVtaXQoXCJ1bmhhbmRsZWRSZWplY3Rpb25cIixvLHQpOihlPWMub251bmhhbmRsZWRyZWplY3Rpb24pP2Uoe3Byb21pc2U6dCxyZWFzb246b30pOihyPWMuY29uc29sZSkmJnIuZXJyb3ImJnIuZXJyb3IoXCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25cIixvKX0pLHQuX2g9X3x8Rih0KT8yOjEpLHQuX2E9dm9pZCAwLG4pdGhyb3cgbi5lcnJvcn0pfSxGPWZ1bmN0aW9uKHQpe2lmKDE9PXQuX2gpcmV0dXJuITE7Zm9yKHZhciBuLGU9dC5fYXx8dC5fYyxyPTA7ZS5sZW5ndGg+cjspaWYobj1lW3IrK10sbi5mYWlsfHwhRihuLnByb21pc2UpKXJldHVybiExO3JldHVybiEwfSxOPWZ1bmN0aW9uKHQpe2QuY2FsbChjLGZ1bmN0aW9uKCl7dmFyIG47Xz94LmVtaXQoXCJyZWplY3Rpb25IYW5kbGVkXCIsdCk6KG49Yy5vbnJlamVjdGlvbmhhbmRsZWQpJiZuKHtwcm9taXNlOnQscmVhc29uOnQuX3Z9KX0pfSxBPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7bi5fZHx8KG4uX2Q9ITAsbj1uLl93fHxuLG4uX3Y9dCxuLl9zPTIsbi5fYXx8KG4uX2E9bi5fYy5zbGljZSgpKSxMKG4sITApKX0sUj1mdW5jdGlvbih0KXt2YXIgbixlPXRoaXM7aWYoIWUuX2Qpe2UuX2Q9ITAsZT1lLl93fHxlO3RyeXtpZihlPT09dCl0aHJvdyB3KFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7KG49RSh0KSk/ZyhmdW5jdGlvbigpe3ZhciByPXtfdzplLF9kOiExfTt0cnl7bi5jYWxsKHQsZihSLHIsMSksZihBLHIsMSkpfWNhdGNoKG8pe0EuY2FsbChyLG8pfX0pOihlLl92PXQsZS5fcz0xLEwoZSwhMSkpfWNhdGNoKHIpe0EuY2FsbCh7X3c6ZSxfZDohMX0scil9fX07anx8KGI9ZnVuY3Rpb24odCl7aCh0aGlzLGIsbSxcIl9oXCIpLHAodCksci5jYWxsKHRoaXMpO3RyeXt0KGYoUix0aGlzLDEpLGYoQSx0aGlzLDEpKX1jYXRjaChuKXtBLmNhbGwodGhpcyxuKX19LHI9ZnVuY3Rpb24odCl7dGhpcy5fYz1bXSx0aGlzLl9hPXZvaWQgMCx0aGlzLl9zPTAsdGhpcy5fZD0hMSx0aGlzLl92PXZvaWQgMCx0aGlzLl9oPTAsdGhpcy5fbj0hMX0sci5wcm90b3R5cGU9ZSg4MykoYi5wcm90b3R5cGUse3RoZW46ZnVuY3Rpb24odCxuKXt2YXIgZT1UKHkodGhpcyxiKSk7cmV0dXJuIGUub2s9XCJmdW5jdGlvblwiIT10eXBlb2YgdHx8dCxlLmZhaWw9XCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbixlLmRvbWFpbj1fP3guZG9tYWluOnZvaWQgMCx0aGlzLl9jLnB1c2goZSksdGhpcy5fYSYmdGhpcy5fYS5wdXNoKGUpLHRoaXMuX3MmJkwodGhpcywhMSksZS5wcm9taXNlfSxcImNhdGNoXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9fSksUD1mdW5jdGlvbigpe3ZhciB0PW5ldyByO3RoaXMucHJvbWlzZT10LHRoaXMucmVzb2x2ZT1mKFIsdCwxKSx0aGlzLnJlamVjdD1mKEEsdCwxKX0pLHMocy5HK3MuVytzLkYqIWose1Byb21pc2U6Yn0pLGUoMjApKGIsbSksZSg4NCkobSksaT1lKDMpW21dLHMocy5TK3MuRiohaixtLHtyZWplY3Q6ZnVuY3Rpb24odCl7dmFyIG49VCh0aGlzKSxlPW4ucmVqZWN0O3JldHVybiBlKHQpLG4ucHJvbWlzZX19KSxzKHMuUytzLkYqKHV8fCFqKSxtLHtyZXNvbHZlOmZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBiJiZTKHQuY29uc3RydWN0b3IsdGhpcykpcmV0dXJuIHQ7dmFyIG49VCh0aGlzKSxlPW4ucmVzb2x2ZTtyZXR1cm4gZSh0KSxuLnByb21pc2V9fSkscyhzLlMrcy5GKiEoaiYmZSg3MykoZnVuY3Rpb24odCl7Yi5hbGwodClbXCJjYXRjaFwiXShPKX0pKSxtLHthbGw6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxlPVQobikscj1lLnJlc29sdmUsbz1lLnJlamVjdCxpPWsoZnVuY3Rpb24oKXt2YXIgZT1bXSxpPTAsdT0xO3YodCwhMSxmdW5jdGlvbih0KXt2YXIgYz1pKyssZj0hMTtlLnB1c2godm9pZCAwKSx1Kyssbi5yZXNvbHZlKHQpLnRoZW4oZnVuY3Rpb24odCl7Znx8KGY9ITAsZVtjXT10LC0tdXx8cihlKSl9LG8pfSksLS11fHxyKGUpfSk7cmV0dXJuIGkmJm8oaS5lcnJvciksZS5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMsZT1UKG4pLHI9ZS5yZWplY3Qsbz1rKGZ1bmN0aW9uKCl7dih0LCExLGZ1bmN0aW9uKHQpe24ucmVzb2x2ZSh0KS50aGVuKGUucmVzb2x2ZSxyKX0pfSk7cmV0dXJuIG8mJnIoby5lcnJvciksZS5wcm9taXNlfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgyKSxvPWUoNyksaT1lKDQpLHU9ZSgxMSksYz1lKDQxKSxmPWUoNzYpLktFWSxhPWUoMTIpLHM9ZSgyOCksbD1lKDIwKSxwPWUoMjEpLGg9ZSgxKSx2PWUoMzIpLHk9ZSgzMSksZD1lKDc1KSxnPWUoNjYpLG09ZSg3MCksdz1lKDYpLHg9ZSg5KSxiPWUoMzApLF89ZSgxOSksTz1lKDM4KSxqPWUoODEpLFM9ZSg4MCksRT1lKDUpLFQ9ZSgxNSksUD1TLmYsaz1FLmYsTD1qLmYsTT1yLlN5bWJvbCxGPXIuSlNPTixOPUYmJkYuc3RyaW5naWZ5LEE9XCJwcm90b3R5cGVcIixSPWgoXCJfaGlkZGVuXCIpLEk9aChcInRvUHJpbWl0aXZlXCIpLEM9e30ucHJvcGVydHlJc0VudW1lcmFibGUsRz1zKFwic3ltYm9sLXJlZ2lzdHJ5XCIpLFc9cyhcInN5bWJvbHNcIiksVT1zKFwib3Atc3ltYm9sc1wiKSxEPU9iamVjdFtBXSxLPVwiZnVuY3Rpb25cIj09dHlwZW9mIE0sQj1yLlFPYmplY3QsSj0hQnx8IUJbQV18fCFCW0FdLmZpbmRDaGlsZCxZPWkmJmEoZnVuY3Rpb24oKXtyZXR1cm4gNyE9TyhrKHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLFwiYVwiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKHQsbixlKXt2YXIgcj1QKEQsbik7ciYmZGVsZXRlIERbbl0sayh0LG4sZSksciYmdCE9PUQmJmsoRCxuLHIpfTprLHE9ZnVuY3Rpb24odCl7dmFyIG49V1t0XT1PKE1bQV0pO3JldHVybiBuLl9rPXQsbn0sej1LJiZcInN5bWJvbFwiPT10eXBlb2YgTS5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNfSxIPWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gdD09PUQmJkgoVSxuLGUpLHcodCksbj1iKG4sITApLHcoZSksbyhXLG4pPyhlLmVudW1lcmFibGU/KG8odCxSKSYmdFtSXVtuXSYmKHRbUl1bbl09ITEpLGU9TyhlLHtlbnVtZXJhYmxlOl8oMCwhMSl9KSk6KG8odCxSKXx8ayh0LFIsXygxLHt9KSksdFtSXVtuXT0hMCksWSh0LG4sZSkpOmsodCxuLGUpfSxWPWZ1bmN0aW9uKHQsbil7dyh0KTtmb3IodmFyIGUscj1nKG49eChuKSksbz0wLGk9ci5sZW5ndGg7aT5vOylIKHQsZT1yW28rK10sbltlXSk7cmV0dXJuIHR9LFE9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwPT09bj9PKHQpOlYoTyh0KSxuKX0sWD1mdW5jdGlvbih0KXt2YXIgbj1DLmNhbGwodGhpcyx0PWIodCwhMCkpO3JldHVybiEodGhpcz09PUQmJm8oVyx0KSYmIW8oVSx0KSkmJighKG58fCFvKHRoaXMsdCl8fCFvKFcsdCl8fG8odGhpcyxSKSYmdGhpc1tSXVt0XSl8fG4pfSwkPWZ1bmN0aW9uKHQsbil7aWYodD14KHQpLG49YihuLCEwKSx0IT09RHx8IW8oVyxuKXx8byhVLG4pKXt2YXIgZT1QKHQsbik7cmV0dXJuIWV8fCFvKFcsbil8fG8odCxSKSYmdFtSXVtuXXx8KGUuZW51bWVyYWJsZT0hMCksZX19LFo9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9TCh4KHQpKSxyPVtdLGk9MDtlLmxlbmd0aD5pOylvKFcsbj1lW2krK10pfHxuPT1SfHxuPT1mfHxyLnB1c2gobik7cmV0dXJuIHJ9LHR0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPXQ9PT1ELHI9TChlP1U6eCh0KSksaT1bXSx1PTA7ci5sZW5ndGg+dTspIW8oVyxuPXJbdSsrXSl8fGUmJiFvKEQsbil8fGkucHVzaChXW25dKTtyZXR1cm4gaX07S3x8KE09ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgTSl0aHJvdyBUeXBlRXJyb3IoXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhXCIpO3ZhciB0PXAoYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApLG49ZnVuY3Rpb24oZSl7dGhpcz09PUQmJm4uY2FsbChVLGUpLG8odGhpcyxSKSYmbyh0aGlzW1JdLHQpJiYodGhpc1tSXVt0XT0hMSksWSh0aGlzLHQsXygxLGUpKX07cmV0dXJuIGkmJkomJlkoRCx0LHtjb25maWd1cmFibGU6ITAsc2V0Om59KSxxKHQpfSxjKE1bQV0sXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2t9KSxTLmY9JCxFLmY9SCxlKDM5KS5mPWouZj1aLGUoMTgpLmY9WCxlKDI2KS5mPXR0LGkmJiFlKDE3KSYmYyhELFwicHJvcGVydHlJc0VudW1lcmFibGVcIixYLCEwKSx2LmY9ZnVuY3Rpb24odCl7cmV0dXJuIHEoaCh0KSl9KSx1KHUuRyt1LlcrdS5GKiFLLHtTeW1ib2w6TX0pO2Zvcih2YXIgbnQ9XCJoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlc1wiLnNwbGl0KFwiLFwiKSxldD0wO250Lmxlbmd0aD5ldDspaChudFtldCsrXSk7Zm9yKHZhciBudD1UKGguc3RvcmUpLGV0PTA7bnQubGVuZ3RoPmV0Oyl5KG50W2V0KytdKTt1KHUuUyt1LkYqIUssXCJTeW1ib2xcIix7XCJmb3JcIjpmdW5jdGlvbih0KXtyZXR1cm4gbyhHLHQrPVwiXCIpP0dbdF06R1t0XT1NKHQpfSxrZXlGb3I6ZnVuY3Rpb24odCl7aWYoeih0KSlyZXR1cm4gZChHLHQpO3Rocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIHN5bWJvbCFcIil9LHVzZVNldHRlcjpmdW5jdGlvbigpe0o9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe0o9ITF9fSksdSh1LlMrdS5GKiFLLFwiT2JqZWN0XCIse2NyZWF0ZTpRLGRlZmluZVByb3BlcnR5OkgsZGVmaW5lUHJvcGVydGllczpWLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjokLGdldE93blByb3BlcnR5TmFtZXM6WixnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6dHR9KSxGJiZ1KHUuUyt1LkYqKCFLfHxhKGZ1bmN0aW9uKCl7dmFyIHQ9TSgpO3JldHVyblwiW251bGxdXCIhPU4oW3RdKXx8XCJ7fVwiIT1OKHthOnR9KXx8XCJ7fVwiIT1OKE9iamVjdCh0KSl9KSksXCJKU09OXCIse3N0cmluZ2lmeTpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT10JiYheih0KSl7Zm9yKHZhciBuLGUscj1bdF0sbz0xO2FyZ3VtZW50cy5sZW5ndGg+bzspci5wdXNoKGFyZ3VtZW50c1tvKytdKTtyZXR1cm4gbj1yWzFdLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihlPW4pLCFlJiZtKG4pfHwobj1mdW5jdGlvbih0LG4pe2lmKGUmJihuPWUuY2FsbCh0aGlzLHQsbikpLCF6KG4pKXJldHVybiBufSksclsxXT1uLE4uYXBwbHkoRixyKX19fSksTVtBXVtJXXx8ZSg4KShNW0FdLEksTVtBXS52YWx1ZU9mKSxsKE0sXCJTeW1ib2xcIiksbChNYXRoLFwiTWF0aFwiLCEwKSxsKHIuSlNPTixcIkpTT05cIiwhMCl9LGZ1bmN0aW9uKHQsbixlKXtlKDMxKShcImFzeW5jSXRlcmF0b3JcIil9LGZ1bmN0aW9uKHQsbixlKXtlKDMxKShcIm9ic2VydmFibGVcIil9LGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gcigpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBvKHQpe2lmKHM9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKHM9PT1lfHwhcykmJnNldFRpbWVvdXQpcmV0dXJuIHM9c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBzKHQsMCl9Y2F0Y2gobil7dHJ5e3JldHVybiBzLmNhbGwobnVsbCx0LDApfWNhdGNoKG4pe3JldHVybiBzLmNhbGwodGhpcyx0LDApfX19ZnVuY3Rpb24gaSh0KXtpZihsPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGw9PT1yfHwhbCkmJmNsZWFyVGltZW91dClyZXR1cm4gbD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtyZXR1cm4gbCh0KX1jYXRjaChuKXt0cnl7cmV0dXJuIGwuY2FsbChudWxsLHQpfWNhdGNoKG4pe3JldHVybiBsLmNhbGwodGhpcyx0KX19fWZ1bmN0aW9uIHUoKXt5JiZoJiYoeT0hMSxoLmxlbmd0aD92PWguY29uY2F0KHYpOmQ9LTEsdi5sZW5ndGgmJmMoKSl9ZnVuY3Rpb24gYygpe2lmKCF5KXt2YXIgdD1vKHUpO3k9ITA7Zm9yKHZhciBuPXYubGVuZ3RoO247KXtmb3IoaD12LHY9W107KytkPG47KWgmJmhbZF0ucnVuKCk7ZD0tMSxuPXYubGVuZ3RofWg9bnVsbCx5PSExLGkodCl9fWZ1bmN0aW9uIGYodCxuKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9bn1mdW5jdGlvbiBhKCl7fXZhciBzLGwscD10LmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e3M9XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OmV9Y2F0Y2godCl7cz1lfXRyeXtsPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6cn1jYXRjaCh0KXtsPXJ9fSgpO3ZhciBoLHY9W10seT0hMSxkPS0xO3AubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIG49bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspbltlLTFdPWFyZ3VtZW50c1tlXTt2LnB1c2gobmV3IGYodCxuKSksMSE9PXYubGVuZ3RofHx5fHxvKGMpfSxmLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxwLnRpdGxlPVwiYnJvd3NlclwiLHAuYnJvd3Nlcj0hMCxwLmVudj17fSxwLmFyZ3Y9W10scC52ZXJzaW9uPVwiXCIscC52ZXJzaW9ucz17fSxwLm9uPWEscC5hZGRMaXN0ZW5lcj1hLHAub25jZT1hLHAub2ZmPWEscC5yZW1vdmVMaXN0ZW5lcj1hLHAucmVtb3ZlQWxsTGlzdGVuZXJzPWEscC5lbWl0PWEscC5iaW5kaW5nPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxwLmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifSxwLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0scC51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sZnVuY3Rpb24odCxuLGUpeyhmdW5jdGlvbihuKXt2YXIgcj1cIm9iamVjdFwiPT10eXBlb2Ygbj9uOlwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3c/d2luZG93Olwib2JqZWN0XCI9PXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxvPXIucmVnZW5lcmF0b3JSdW50aW1lJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKS5pbmRleE9mKFwicmVnZW5lcmF0b3JSdW50aW1lXCIpPj0wLGk9byYmci5yZWdlbmVyYXRvclJ1bnRpbWU7aWYoci5yZWdlbmVyYXRvclJ1bnRpbWU9dm9pZCAwLHQuZXhwb3J0cz1lKDk4KSxvKXIucmVnZW5lcmF0b3JSdW50aW1lPWk7ZWxzZSB0cnl7ZGVsZXRlIHIucmVnZW5lcmF0b3JSdW50aW1lfWNhdGNoKHUpe3IucmVnZW5lcmF0b3JSdW50aW1lPXZvaWQgMH19KS5jYWxsKG4sZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKSl9LGZ1bmN0aW9uKHQsbixlKXsoZnVuY3Rpb24obixlKXshZnVuY3Rpb24obil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0LG4sZSxyKXt2YXIgbz1PYmplY3QuY3JlYXRlKChufHxpKS5wcm90b3R5cGUpLHU9bmV3IHYocnx8W10pO3JldHVybiBvLl9pbnZva2U9bCh0LGUsdSksb31mdW5jdGlvbiBvKHQsbixlKXt0cnl7cmV0dXJue3R5cGU6XCJub3JtYWxcIixhcmc6dC5jYWxsKG4sZSl9fWNhdGNoKHIpe3JldHVybnt0eXBlOlwidGhyb3dcIixhcmc6cn19fWZ1bmN0aW9uIGkoKXt9ZnVuY3Rpb24gdSgpe31mdW5jdGlvbiBjKCl7fWZ1bmN0aW9uIGYodCl7W1wibmV4dFwiLFwidGhyb3dcIixcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShuLHQpfX0pfWZ1bmN0aW9uIGEodCl7dGhpcy5hcmc9dH1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIG4oZSxyLGksdSl7dmFyIGM9byh0W2VdLHQscik7aWYoXCJ0aHJvd1wiIT09Yy50eXBlKXt2YXIgZj1jLmFyZyxzPWYudmFsdWU7cmV0dXJuIHMgaW5zdGFuY2VvZiBhP1Byb21pc2UucmVzb2x2ZShzLmFyZykudGhlbihmdW5jdGlvbih0KXtuKFwibmV4dFwiLHQsaSx1KX0sZnVuY3Rpb24odCl7bihcInRocm93XCIsdCxpLHUpfSk6UHJvbWlzZS5yZXNvbHZlKHMpLnRoZW4oZnVuY3Rpb24odCl7Zi52YWx1ZT10LGkoZil9LHUpfXUoYy5hcmcpfWZ1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7bih0LGUscixvKX0pfXJldHVybiBpPWk/aS50aGVuKHIscik6cigpfVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmRvbWFpbiYmKG49ZS5kb21haW4uYmluZChuKSk7dmFyIGk7dGhpcy5faW52b2tlPXJ9ZnVuY3Rpb24gbCh0LG4sZSl7dmFyIHI9ajtyZXR1cm4gZnVuY3Rpb24oaSx1KXtpZihyPT09RSl0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO2lmKHI9PT1UKXtpZihcInRocm93XCI9PT1pKXRocm93IHU7cmV0dXJuIGQoKX1mb3IoOzspe3ZhciBjPWUuZGVsZWdhdGU7aWYoYyl7aWYoXCJyZXR1cm5cIj09PWl8fFwidGhyb3dcIj09PWkmJmMuaXRlcmF0b3JbaV09PT1nKXtlLmRlbGVnYXRlPW51bGw7dmFyIGY9Yy5pdGVyYXRvcltcInJldHVyblwiXTtpZihmKXt2YXIgYT1vKGYsYy5pdGVyYXRvcix1KTtpZihcInRocm93XCI9PT1hLnR5cGUpe2k9XCJ0aHJvd1wiLHU9YS5hcmc7Y29udGludWV9fWlmKFwicmV0dXJuXCI9PT1pKWNvbnRpbnVlfXZhciBhPW8oYy5pdGVyYXRvcltpXSxjLml0ZXJhdG9yLHUpO2lmKFwidGhyb3dcIj09PWEudHlwZSl7ZS5kZWxlZ2F0ZT1udWxsLGk9XCJ0aHJvd1wiLHU9YS5hcmc7Y29udGludWV9aT1cIm5leHRcIix1PWc7dmFyIHM9YS5hcmc7aWYoIXMuZG9uZSlyZXR1cm4gcj1TLHM7ZVtjLnJlc3VsdE5hbWVdPXMudmFsdWUsZS5uZXh0PWMubmV4dExvYyxlLmRlbGVnYXRlPW51bGx9aWYoXCJuZXh0XCI9PT1pKWUuc2VudD1lLl9zZW50PXU7ZWxzZSBpZihcInRocm93XCI9PT1pKXtpZihyPT09ail0aHJvdyByPVQsdTtlLmRpc3BhdGNoRXhjZXB0aW9uKHUpJiYoaT1cIm5leHRcIix1PWcpfWVsc2VcInJldHVyblwiPT09aSYmZS5hYnJ1cHQoXCJyZXR1cm5cIix1KTtyPUU7dmFyIGE9byh0LG4sZSk7aWYoXCJub3JtYWxcIj09PWEudHlwZSl7cj1lLmRvbmU/VDpTO3ZhciBzPXt2YWx1ZTphLmFyZyxkb25lOmUuZG9uZX07aWYoYS5hcmchPT1QKXJldHVybiBzO2UuZGVsZWdhdGUmJlwibmV4dFwiPT09aSYmKHU9Zyl9ZWxzZVwidGhyb3dcIj09PWEudHlwZSYmKHI9VCxpPVwidGhyb3dcIix1PWEuYXJnKX19fWZ1bmN0aW9uIHAodCl7dmFyIG49e3RyeUxvYzp0WzBdfTsxIGluIHQmJihuLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKG4uZmluYWxseUxvYz10WzJdLG4uYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2gobil9ZnVuY3Rpb24gaCh0KXt2YXIgbj10LmNvbXBsZXRpb258fHt9O24udHlwZT1cIm5vcm1hbFwiLGRlbGV0ZSBuLmFyZyx0LmNvbXBsZXRpb249bn1mdW5jdGlvbiB2KHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzpcInJvb3RcIn1dLHQuZm9yRWFjaChwLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIHkodCl7aWYodCl7dmFyIG49dFt4XTtpZihuKXJldHVybiBuLmNhbGwodCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBlPS0xLHI9ZnVuY3Rpb24gbygpe2Zvcig7KytlPHQubGVuZ3RoOylpZihtLmNhbGwodCxlKSlyZXR1cm4gby52YWx1ZT10W2VdLG8uZG9uZT0hMSxvO3JldHVybiBvLnZhbHVlPWcsby5kb25lPSEwLG99O3JldHVybiByLm5leHQ9cn19cmV0dXJue25leHQ6ZH19ZnVuY3Rpb24gZCgpe3JldHVybnt2YWx1ZTpnLGRvbmU6ITB9fXZhciBnLG09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx3PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30seD13Lml0ZXJhdG9yfHxcIkBAaXRlcmF0b3JcIixiPXcudG9TdHJpbmdUYWd8fFwiQEB0b1N0cmluZ1RhZ1wiLF89XCJvYmplY3RcIj09dHlwZW9mIHQsTz1uLnJlZ2VuZXJhdG9yUnVudGltZTtpZihPKXJldHVybiB2b2lkKF8mJih0LmV4cG9ydHM9TykpO089bi5yZWdlbmVyYXRvclJ1bnRpbWU9Xz90LmV4cG9ydHM6e30sTy53cmFwPXI7dmFyIGo9XCJzdXNwZW5kZWRTdGFydFwiLFM9XCJzdXNwZW5kZWRZaWVsZFwiLEU9XCJleGVjdXRpbmdcIixUPVwiY29tcGxldGVkXCIsUD17fSxrPWMucHJvdG90eXBlPWkucHJvdG90eXBlO3UucHJvdG90eXBlPWsuY29uc3RydWN0b3I9YyxjLmNvbnN0cnVjdG9yPXUsY1tiXT11LmRpc3BsYXlOYW1lPVwiR2VuZXJhdG9yRnVuY3Rpb25cIixPLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIW4mJihuPT09dXx8XCJHZW5lcmF0b3JGdW5jdGlvblwiPT09KG4uZGlzcGxheU5hbWV8fG4ubmFtZSkpfSxPLm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxjKToodC5fX3Byb3RvX189YyxiIGluIHR8fCh0W2JdPVwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoayksdH0sTy5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEodCl9LGYocy5wcm90b3R5cGUpLE8uYXN5bmM9ZnVuY3Rpb24odCxuLGUsbyl7dmFyIGk9bmV3IHMocih0LG4sZSxvKSk7cmV0dXJuIE8uaXNHZW5lcmF0b3JGdW5jdGlvbihuKT9pOmkubmV4dCgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOmkubmV4dCgpfSl9LGYoayksa1t4XT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxrW2JdPVwiR2VuZXJhdG9yXCIsay50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBHZW5lcmF0b3JdXCJ9LE8ua2V5cz1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2goZSk7cmV0dXJuIG4ucmV2ZXJzZSgpLGZ1bmN0aW9uIHIoKXtmb3IoO24ubGVuZ3RoOyl7dmFyIGU9bi5wb3AoKTtpZihlIGluIHQpcmV0dXJuIHIudmFsdWU9ZSxyLmRvbmU9ITEscn1yZXR1cm4gci5kb25lPSEwLFxucn19LE8udmFsdWVzPXksdi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnYscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9Zyx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKGgpLCF0KWZvcih2YXIgbiBpbiB0aGlzKVwidFwiPT09bi5jaGFyQXQoMCkmJm0uY2FsbCh0aGlzLG4pJiYhaXNOYU4oK24uc2xpY2UoMSkpJiYodGhpc1tuXT1nKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0sbj10LmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09bi50eXBlKXRocm93IG4uYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4obixyKXtyZXR1cm4gaS50eXBlPVwidGhyb3dcIixpLmFyZz10LGUubmV4dD1uLCEhcn1pZih0aGlzLmRvbmUpdGhyb3cgdDtmb3IodmFyIGU9dGhpcyxyPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG89dGhpcy50cnlFbnRyaWVzW3JdLGk9by5jb21wbGV0aW9uO2lmKFwicm9vdFwiPT09by50cnlMb2MpcmV0dXJuIG4oXCJlbmRcIik7aWYoby50cnlMb2M8PXRoaXMucHJldil7dmFyIHU9bS5jYWxsKG8sXCJjYXRjaExvY1wiKSxjPW0uY2FsbChvLFwiZmluYWxseUxvY1wiKTtpZih1JiZjKXtpZih0aGlzLnByZXY8by5jYXRjaExvYylyZXR1cm4gbihvLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8by5maW5hbGx5TG9jKXJldHVybiBuKG8uZmluYWxseUxvYyl9ZWxzZSBpZih1KXtpZih0aGlzLnByZXY8by5jYXRjaExvYylyZXR1cm4gbihvLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO2lmKHRoaXMucHJldjxvLmZpbmFsbHlMb2MpcmV0dXJuIG4oby5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPD10aGlzLnByZXYmJm0uY2FsbChyLFwiZmluYWxseUxvY1wiKSYmdGhpcy5wcmV2PHIuZmluYWxseUxvYyl7dmFyIG89cjticmVha319byYmKFwiYnJlYWtcIj09PXR8fFwiY29udGludWVcIj09PXQpJiZvLnRyeUxvYzw9biYmbjw9by5maW5hbGx5TG9jJiYobz1udWxsKTt2YXIgaT1vP28uY29tcGxldGlvbjp7fTtyZXR1cm4gaS50eXBlPXQsaS5hcmc9bixvP3RoaXMubmV4dD1vLmZpbmFsbHlMb2M6dGhpcy5jb21wbGV0ZShpKSxQfSxjb21wbGV0ZTpmdW5jdGlvbih0LG4pe2lmKFwidGhyb3dcIj09PXQudHlwZSl0aHJvdyB0LmFyZztcImJyZWFrXCI9PT10LnR5cGV8fFwiY29udGludWVcIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6XCJyZXR1cm5cIj09PXQudHlwZT8odGhpcy5ydmFsPXQuYXJnLHRoaXMubmV4dD1cImVuZFwiKTpcIm5vcm1hbFwiPT09dC50eXBlJiZuJiYodGhpcy5uZXh0PW4pfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGU9dGhpcy50cnlFbnRyaWVzW25dO2lmKGUuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoZS5jb21wbGV0aW9uLGUuYWZ0ZXJMb2MpLGgoZSksUH19LFwiY2F0Y2hcIjpmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgZT10aGlzLnRyeUVudHJpZXNbbl07aWYoZS50cnlMb2M9PT10KXt2YXIgcj1lLmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09ci50eXBlKXt2YXIgbz1yLmFyZztoKGUpfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxuLGUpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjp5KHQpLHJlc3VsdE5hbWU6bixuZXh0TG9jOmV9LFB9fX0oXCJvYmplY3RcIj09dHlwZW9mIG4/bjpcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpfSkuY2FsbChuLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCksZSg5NikpfV0pOyIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvLyBUaGlzIG1ldGhvZCBvZiBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgbmVlZHMgdG8gYmVcbi8vIGtlcHQgaWRlbnRpY2FsIHRvIHRoZSB3YXkgaXQgaXMgb2J0YWluZWQgaW4gcnVudGltZS5qc1xudmFyIGcgPVxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXM7XG5cbi8vIFVzZSBgZ2V0T3duUHJvcGVydHlOYW1lc2AgYmVjYXVzZSBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgY2FsbGluZ1xuLy8gYGhhc093blByb3BlcnR5YCBvbiB0aGUgZ2xvYmFsIGBzZWxmYCBvYmplY3QgaW4gYSB3b3JrZXIuIFNlZSAjMTgzLlxudmFyIGhhZFJ1bnRpbWUgPSBnLnJlZ2VuZXJhdG9yUnVudGltZSAmJlxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhnKS5pbmRleE9mKFwicmVnZW5lcmF0b3JSdW50aW1lXCIpID49IDA7XG5cbi8vIFNhdmUgdGhlIG9sZCByZWdlbmVyYXRvclJ1bnRpbWUgaW4gY2FzZSBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBsYXRlci5cbnZhciBvbGRSdW50aW1lID0gaGFkUnVudGltZSAmJiBnLnJlZ2VuZXJhdG9yUnVudGltZTtcblxuLy8gRm9yY2UgcmVldmFsdXRhdGlvbiBvZiBydW50aW1lLmpzLlxuZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vcnVudGltZVwiKTtcblxuaWYgKGhhZFJ1bnRpbWUpIHtcbiAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcnVudGltZS5cbiAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBvbGRSdW50aW1lO1xufSBlbHNlIHtcbiAgLy8gUmVtb3ZlIHRoZSBnbG9iYWwgcHJvcGVydHkgYWRkZWQgYnkgcnVudGltZS5qcy5cbiAgdHJ5IHtcbiAgICBkZWxldGUgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIH0gY2F0Y2goZSkge1xuICAgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IHByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIiB8fFxuICAgICAgICAgICAgICAobWV0aG9kID09PSBcInRocm93XCIgJiYgZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgLy8gQSByZXR1cm4gb3IgdGhyb3cgKHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyB0aHJvd1xuICAgICAgICAgICAgLy8gbWV0aG9kKSBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgICAgdmFyIHJldHVybk1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdO1xuICAgICAgICAgICAgaWYgKHJldHVybk1ldGhvZCkge1xuICAgICAgICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gocmV0dXJuTWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgYXJnKTtcbiAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmV0dXJuIG1ldGhvZCB0aHJldyBhbiBleGNlcHRpb24sIGxldCB0aGF0XG4gICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHByZXZhaWwgb3ZlciB0aGUgb3JpZ2luYWwgcmV0dXJuIG9yIHRocm93LlxuICAgICAgICAgICAgICAgIG1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgICAgICBhcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICAgICAgLy8gQ29udGludWUgd2l0aCB0aGUgb3V0ZXIgcmV0dXJuLCBub3cgdGhhdCB0aGUgZGVsZWdhdGVcbiAgICAgICAgICAgICAgLy8gaXRlcmF0b3IgaGFzIGJlZW4gdGVybWluYXRlZC5cbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKFxuICAgICAgICAgICAgZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kXSxcbiAgICAgICAgICAgIGRlbGVnYXRlLml0ZXJhdG9yLFxuICAgICAgICAgICAgYXJnXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gTGlrZSByZXR1cm5pbmcgZ2VuZXJhdG9yLnRocm93KHVuY2F1Z2h0KSwgYnV0IHdpdGhvdXQgdGhlXG4gICAgICAgICAgICAvLyBvdmVyaGVhZCBvZiBhbiBleHRyYSBmdW5jdGlvbiBjYWxsLlxuICAgICAgICAgICAgbWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERlbGVnYXRlIGdlbmVyYXRvciByYW4gYW5kIGhhbmRsZWQgaXRzIG93biBleGNlcHRpb25zIHNvXG4gICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBtZXRob2Qgd2FzLCB3ZSBjb250aW51ZSBhcyBpZiBpdCBpc1xuICAgICAgICAgIC8vIFwibmV4dFwiIHdpdGggYW4gdW5kZWZpbmVkIGFyZy5cbiAgICAgICAgICBtZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG4gICAgICAgICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG4gICAgICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oYXJnKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgICBtZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICAgIGFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBhcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIHZhciBpbmZvID0ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmRlbGVnYXRlICYmIG1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZvO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG4gICAgICAgIHJldHVybiAhIWNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuICAvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3RcbiAgLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzXG4pO1xuIiwiZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBjb250cm9sUG9zaXRpb246ICdyaWdodCcsXG4gICAgICBhcHBlbmQ6IGZhbHNlLFxuICAgICAgY29udHJvbE9yZGVyOiBbXG4gICAgICAgICdhdXRvY29tcGxldGUnLFxuICAgICAgICAnYnV0dG9uJyxcbiAgICAgICAgJ2NoZWNrYm94JyxcbiAgICAgICAgJ2NoZWNrYm94LWdyb3VwJyxcbiAgICAgICAgJ2RhdGUnLFxuICAgICAgICAnZmlsZScsXG4gICAgICAgICdoZWFkZXInLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ3BhcmFncmFwaCcsXG4gICAgICAgICdudW1iZXInLFxuICAgICAgICAncmFkaW8tZ3JvdXAnLFxuICAgICAgICAnc2VsZWN0JyxcbiAgICAgICAgJ3RleHQnLFxuICAgICAgICAndGV4dGFyZWEnXG4gICAgICBdLFxuICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgIC8vIEFycmF5IG9mIGZpZWxkcyB0byBkaXNhYmxlXG4gICAgICBkaXNhYmxlRmllbGRzOiBbXSxcbiAgICAgIGRpc2FibGVkQXR0cnM6IFtdLFxuICAgICAgZGlzYWJsZWRBY3Rpb25CdXR0b25zOiBbXSxcbiAgICAgIGVkaXRPbkFkZDogZmFsc2UsXG4gICAgICAvLyBVbmVkaXRhYmxlIGZpZWxkcyBvciBvdGhlciBjb250ZW50IHlvdSB3b3VsZCBsaWtlIHRvIGFwcGVhclxuICAgICAgLy8gYmVmb3JlIGFuZCBhZnRlciByZWd1bGFyIGZpZWxkczpcbiAgICAgIC8vIGFycmF5IG9mIG9iamVjdHMgd2l0aCBmaWVsZHMgdmFsdWVzXG4gICAgICAvLyBleDpcbiAgICAgIC8vIGRlZmF1bHRGaWVsZHM6IFt7XG4gICAgICAvLyAgIGxhYmVsOiAnRmlyc3QgTmFtZScsXG4gICAgICAvLyAgIG5hbWU6ICdmaXJzdC1uYW1lJyxcbiAgICAgIC8vICAgcmVxdWlyZWQ6ICd0cnVlJyxcbiAgICAgIC8vICAgZGVzY3JpcHRpb246ICdZb3VyIGZpcnN0IG5hbWUnLFxuICAgICAgLy8gICB0eXBlOiAndGV4dCdcbiAgICAgIC8vIH0sIHtcbiAgICAgIC8vICAgbGFiZWw6ICdQaG9uZScsXG4gICAgICAvLyAgIG5hbWU6ICdwaG9uZScsXG4gICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnSG93IGNhbiB3ZSByZWFjaCB5b3U/JyxcbiAgICAgIC8vICAgdHlwZTogJ3RleHQnXG4gICAgICAvLyB9XSxcbiAgICAgIGRlZmF1bHRGaWVsZHM6IFtdLFxuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGZpZWxkUmVtb3ZlV2FybjogZmFsc2UsXG4gICAgICBpbnB1dFNldHM6IFtdLFxuICAgICAgcm9sZXM6IHtcbiAgICAgICAgMTogJ0FkbWluaXN0cmF0b3InXG4gICAgICB9LFxuICAgICAgbm90aWZ5OiB7XG4gICAgICAgIGVycm9yOiBtZXNzYWdlID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSksXG4gICAgICAgIHN1Y2Nlc3M6IG1lc3NhZ2UgPT4gY29uc29sZS5sb2cobWVzc2FnZSksXG4gICAgICAgIHdhcm5pbmc6IG1lc3NhZ2UgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gICAgICB9LFxuICAgICAgb25TYXZlOiAoZXZ0LCBmb3JtRGF0YSkgPT4gbnVsbCxcbiAgICAgIG9uQ2xlYXJBbGw6ICgpID0+IG51bGwsXG4gICAgICBwcmVwZW5kOiBmYWxzZSxcbiAgICAgIHNvcnRhYmxlQ29udHJvbHM6IGZhbHNlLFxuICAgICAgc3RpY2t5Q29udHJvbHM6IHtcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxuICAgICAgICBvZmZzZXQ6IHtcbiAgICAgICAgICB0b3A6IDUsXG4gICAgICAgICAgYm90dG9tOiAnYXV0bycsXG4gICAgICAgICAgcmlnaHQ6ICdhdXRvJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGVtcGxhdGVzOiB7fSxcbiAgICAgIHNob3dBY3Rpb25CdXR0b25zOiB0cnVlLFxuICAgICAgdHlwZVVzZXJEaXNhYmxlZEF0dHJzOiB7fSxcbiAgICAgIHR5cGVVc2VyQXR0cnM6IHt9LFxuICAgICAgdHlwZVVzZXJFdmVudHM6IHt9LFxuICAgICAgcHJlZml4OiAnZm9ybS1idWlsZGVyLSdcbiAgICB9O1xuXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0STE4biA9IHtcbiAgICAgIGxvY2F0aW9uOiAnaHR0cHM6Ly9mb3JtYnVpbGRlci5vbmxpbmUvYXNzZXRzL2xhbmcvJyxcbiAgICAgIGxhbmdzOiBbXG4gICAgICAgICdlbi1VUydcbiAgICAgIF0sXG4gICAgICBwcmVsb2FkZWQ6IHtcbiAgICAgICAgJ2VuLVVTJzoge1xuICAgICAgICAgIGFkZE9wdGlvbjogJ0FkZCBPcHRpb24gKycsXG4gICAgICAgICAgYWxsRmllbGRzUmVtb3ZlZDogJ0FsbCBmaWVsZHMgd2VyZSByZW1vdmVkLicsXG4gICAgICAgICAgYWxsb3dNdWx0aXBsZUZpbGVzOiAnQWxsb3cgdXNlcnMgdG8gdXBsb2FkIG11bHRpcGxlIGZpbGVzJyxcbiAgICAgICAgICBhdXRvY29tcGxldGU6ICdBdXRvY29tcGxldGUnLFxuICAgICAgICAgIGJ1dHRvbjogJ0J1dHRvbicsXG4gICAgICAgICAgY2Fubm90QmVFbXB0eTogJ1RoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5JyxcbiAgICAgICAgICBjaGVja2JveEdyb3VwOiAnQ2hlY2tib3ggR3JvdXAnLFxuICAgICAgICAgIGNoZWNrYm94OiAnQ2hlY2tib3gnLFxuICAgICAgICAgIGNoZWNrYm94ZXM6ICdDaGVja2JveGVzJyxcbiAgICAgICAgICBjbGFzc05hbWU6ICdDbGFzcycsXG4gICAgICAgICAgY2xlYXJBbGxNZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsZWFyIGFsbCBmaWVsZHM/JyxcbiAgICAgICAgICBjbGVhcjogJ0NsZWFyJyxcbiAgICAgICAgICBjbG9zZTogJ0Nsb3NlJyxcbiAgICAgICAgICBjb250ZW50OiAnQ29udGVudCcsXG4gICAgICAgICAgY29weTogJ0NvcHkgVG8gQ2xpcGJvYXJkJyxcbiAgICAgICAgICBjb3B5QnV0dG9uOiAnJiM0MzsnLFxuICAgICAgICAgIGNvcHlCdXR0b25Ub29sdGlwOiAnQ29weScsXG4gICAgICAgICAgZGF0ZUZpZWxkOiAnRGF0ZSBGaWVsZCcsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdIZWxwIFRleHQnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uRmllbGQ6ICdEZXNjcmlwdGlvbicsXG4gICAgICAgICAgZGV2TW9kZTogJ0RldmVsb3BlciBNb2RlJyxcbiAgICAgICAgICBlZGl0TmFtZXM6ICdFZGl0IE5hbWVzJyxcbiAgICAgICAgICBlZGl0b3JUaXRsZTogJ0Zvcm0gRWxlbWVudHMnLFxuICAgICAgICAgIGVkaXRYTUw6ICdFZGl0IFhNTCcsXG4gICAgICAgICAgZW5hYmxlT3RoZXI6ICdFbmFibGUgJnF1b3Q7T3RoZXImcXVvdDsnLFxuICAgICAgICAgIGVuYWJsZU90aGVyTXNnOiAnTGV0IHVzZXJzIHRvIGVudGVyIGFuIHVubGlzdGVkIG9wdGlvbicsXG4gICAgICAgICAgZmllbGROb25FZGl0YWJsZTogJ1RoaXMgZmllbGQgY2Fubm90IGJlIGVkaXRlZC4nLFxuICAgICAgICAgIGZpZWxkUmVtb3ZlV2FybmluZzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBmaWVsZD8nLFxuICAgICAgICAgIGZpbGVVcGxvYWQ6ICdGaWxlIFVwbG9hZCcsXG4gICAgICAgICAgZm9ybVVwZGF0ZWQ6ICdGb3JtIFVwZGF0ZWQnLFxuICAgICAgICAgIGdldFN0YXJ0ZWQ6ICdEcmFnIGEgZmllbGQgZnJvbSB0aGUgcmlnaHQgdG8gdGhpcyBhcmVhJyxcbiAgICAgICAgICBoZWFkZXI6ICdIZWFkZXInLFxuICAgICAgICAgIGhpZGU6ICdFZGl0JyxcbiAgICAgICAgICBoaWRkZW46ICdIaWRkZW4gSW5wdXQnLFxuICAgICAgICAgIGlubGluZTogJ0lubGluZScsXG4gICAgICAgICAgaW5saW5lRGVzYzogJ0Rpc3BsYXkge3R5cGV9IGlubGluZScsXG4gICAgICAgICAgbGFiZWw6ICdMYWJlbCcsXG4gICAgICAgICAgbGFiZWxFbXB0eTogJ0ZpZWxkIExhYmVsIGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgICAgbGltaXRSb2xlOiAnTGltaXQgYWNjZXNzIHRvIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgcm9sZXM6JyxcbiAgICAgICAgICBtYW5kYXRvcnk6ICdNYW5kYXRvcnknLFxuICAgICAgICAgIG1heGxlbmd0aDogJ01heCBMZW5ndGgnLFxuICAgICAgICAgIG1pbk9wdGlvbk1lc3NhZ2U6ICdUaGlzIGZpZWxkIHJlcXVpcmVzIGEgbWluaW11bSBvZiAyIG9wdGlvbnMnLFxuICAgICAgICAgIG11bHRpcGxlRmlsZXM6ICdNdWx0aXBsZSBGaWxlcycsXG4gICAgICAgICAgbmFtZTogJ05hbWUnLFxuICAgICAgICAgIG5vOiAnTm8nLFxuICAgICAgICAgIG5vRmllbGRzVG9DbGVhcjogJ1RoZXJlIGFyZSBubyBmaWVsZHMgdG8gY2xlYXInLFxuICAgICAgICAgIG51bWJlcjogJ051bWJlcicsXG4gICAgICAgICAgb2ZmOiAnT2ZmJyxcbiAgICAgICAgICBvbjogJ09uJyxcbiAgICAgICAgICBvcHRpb246ICdPcHRpb24nLFxuICAgICAgICAgIG9wdGlvbnM6ICdPcHRpb25zJyxcbiAgICAgICAgICBvcHRpb25hbDogJ29wdGlvbmFsJyxcbiAgICAgICAgICBvcHRpb25MYWJlbFBsYWNlaG9sZGVyOiAnTGFiZWwnLFxuICAgICAgICAgIG9wdGlvblZhbHVlUGxhY2Vob2xkZXI6ICdWYWx1ZScsXG4gICAgICAgICAgb3B0aW9uRW1wdHk6ICdPcHRpb24gdmFsdWUgcmVxdWlyZWQnLFxuICAgICAgICAgIG90aGVyOiAnT3RoZXInLFxuICAgICAgICAgIHBhcmFncmFwaDogJ1BhcmFncmFwaCcsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGFjZWhvbGRlcicsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLnZhbHVlJzogJ1ZhbHVlJyxcbiAgICAgICAgICAncGxhY2Vob2xkZXIubGFiZWwnOiAnTGFiZWwnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci50ZXh0JzogJycsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLnRleHRhcmVhJzogJycsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLmVtYWlsJzogJ0VudGVyIHlvdSBlbWFpbCcsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLnBsYWNlaG9sZGVyJzogJycsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLmNsYXNzTmFtZSc6ICdzcGFjZSBzZXBhcmF0ZWQgY2xhc3NlcycsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLnBhc3N3b3JkJzogJ0VudGVyIHlvdXIgcGFzc3dvcmQnLFxuICAgICAgICAgIHByZXZpZXc6ICdQcmV2aWV3JyxcbiAgICAgICAgICByYWRpb0dyb3VwOiAnUmFkaW8gR3JvdXAnLFxuICAgICAgICAgIHJhZGlvOiAnUmFkaW8nLFxuICAgICAgICAgIHJlbW92ZU1lc3NhZ2U6ICdSZW1vdmUgRWxlbWVudCcsXG4gICAgICAgICAgcmVtb3ZlT3B0aW9uOiAnUmVtb3ZlIE9wdGlvbicsXG4gICAgICAgICAgcmVtb3ZlOiAnJiMyMTU7JyxcbiAgICAgICAgICByZXF1aXJlZDogJ1JlcXVpcmVkJyxcbiAgICAgICAgICByaWNoVGV4dDogJ1JpY2ggVGV4dCBFZGl0b3InLFxuICAgICAgICAgIHJvbGVzOiAnQWNjZXNzJyxcbiAgICAgICAgICByb3dzOiAnUm93cycsXG4gICAgICAgICAgc2F2ZTogJ1NhdmUnLFxuICAgICAgICAgIHNlbGVjdE9wdGlvbnM6ICdPcHRpb25zJyxcbiAgICAgICAgICBzZWxlY3Q6ICdTZWxlY3QnLFxuICAgICAgICAgIHNlbGVjdENvbG9yOiAnU2VsZWN0IENvbG9yJyxcbiAgICAgICAgICBzZWxlY3Rpb25zTWVzc2FnZTogJ0FsbG93IE11bHRpcGxlIFNlbGVjdGlvbnMnLFxuICAgICAgICAgIHNpemU6ICdTaXplJyxcbiAgICAgICAgICAnc2l6ZS54cyc6ICdFeHRyYSBTbWFsbCcsXG4gICAgICAgICAgJ3NpemUuc20nOiAnU21hbGwnLFxuICAgICAgICAgICdzaXplLm0nOiAnRGVmYXVsdCcsXG4gICAgICAgICAgJ3NpemUubGcnOiAnTGFyZ2UnLFxuICAgICAgICAgIHN0eWxlOiAnU3R5bGUnLFxuICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgYnRuOiB7XG4gICAgICAgICAgICAgICdkZWZhdWx0JzogJ0RlZmF1bHQnLFxuICAgICAgICAgICAgICBkYW5nZXI6ICdEYW5nZXInLFxuICAgICAgICAgICAgICBpbmZvOiAnSW5mbycsXG4gICAgICAgICAgICAgIHByaW1hcnk6ICdQcmltYXJ5JyxcbiAgICAgICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB3YXJuaW5nOiAnV2FybmluZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHN1YnR5cGU6ICdUeXBlJyxcbiAgICAgICAgICB0ZXh0OiAnVGV4dCBGaWVsZCcsXG4gICAgICAgICAgdGV4dEFyZWE6ICdUZXh0IEFyZWEnLFxuICAgICAgICAgIHRvZ2dsZTogJ1RvZ2dsZScsXG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmchJyxcbiAgICAgICAgICB2YWx1ZTogJ1ZhbHVlJyxcbiAgICAgICAgICB2aWV3SlNPTjogJ3sgIH0nLFxuICAgICAgICAgIHZpZXdYTUw6ICcmbHQ7LyZndDsnLFxuICAgICAgICAgIHllczogJ1llcydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBjb25maWcgPSB7fTtcbiIsImV4cG9ydCBjb25zdCBpbnN0YW5jZURhdGEgPSB7fTtcblxuZXhwb3J0IGNsYXNzIERhdGEge1xuICBjb25zdHJ1Y3Rvcihmb3JtSUQpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0ge307XG4gICAgdGhpcy5mb3JtSUQgPSBmb3JtSUQ7XG4gICAgdGhpcy5sYXlvdXQgPSAnJztcbiAgICBpbnN0YW5jZURhdGFbZm9ybUlEXSA9IHRoaXM7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGF2YWlsYWJsZWZpZWxkcyA9IHt9O1xuIiwiXG5leHBvcnQgY29uc3QgaW5zdGFuY2VEb20gPSB7fTtcbmV4cG9ydCBjb25zdCBkZWZhdWx0U3VidHlwZXMgPSB7XG4gICAgICB0ZXh0OiBbJ3RleHQnLCAncGFzc3dvcmQnLCAnZW1haWwnLCAnY29sb3InLCAndGVsJ10sXG4gICAgICBoZWFkZXI6IFsnaDEnLCAnaDInLCAnaDMnXSxcbiAgICAgIGJ1dHRvbjogWydidXR0b24nLCAnc3VibWl0JywgJ3Jlc2V0J10sXG4gICAgICBwYXJhZ3JhcGg6IFsncCcsICdhZGRyZXNzJywgJ2Jsb2NrcXVvdGUnLCAnY2FudmFzJywgJ291dHB1dCddLFxuICAgICAgdGV4dGFyZWE6IFsndGV4dGFyZWEnLCAncXVpbGwnXVxuICAgIH07XG5cblxuZXhwb3J0IGNvbnN0IGVtcHR5ID0gZWxlbWVudCA9PiB7XG4gIHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyID0gKGVsZW1zLCB0ZXJtLCBzaG93ID0gdHJ1ZSkgPT4ge1xuICBsZXQgZmlsdGVyZWRFbGVtcyA9IFtdO1xuICBsZXQgdG9nZ2xlID0gWydub25lJywgJ2Jsb2NrJ107XG5cbiAgaWYgKHNob3cpIHtcbiAgICB0b2dnbGUgPSB0b2dnbGUucmV2ZXJzZSgpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IGVsZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGV0IHR4dCA9IGVsZW1zW2ldLnRleHRDb250ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHR4dC5pbmRleE9mKHRlcm0udG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICBlbGVtc1tpXS5zdHlsZS5kaXNwbGF5ID0gdG9nZ2xlWzBdO1xuICAgICAgZmlsdGVyZWRFbGVtcy5wdXNoKGVsZW1zW2ldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbXNbaV0uc3R5bGUuZGlzcGxheSA9IHRvZ2dsZVsxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRFbGVtcztcbn07XG5cbmV4cG9ydCBjb25zdCBvcHRpb25GaWVsZHMgPSBbXG4gICAgICAnc2VsZWN0JyxcbiAgICAgICdjaGVja2JveC1ncm91cCcsXG4gICAgICAnY2hlY2tib3gnLFxuICAgICAgJ3JhZGlvLWdyb3VwJyxcbiAgICAgICdhdXRvY29tcGxldGUnXG4gICAgXTtcblxuZXhwb3J0IGNvbnN0IG9wdGlvbkZpZWxkc1JlZ0V4ID0gbmV3IFJlZ0V4cChgKCR7b3B0aW9uRmllbGRzLmpvaW4oJ3wnKX0pYCk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb20ge1xuICBjb25zdHJ1Y3Rvcihmb3JtSUQpIHtcbiAgICB0aGlzLm9wdGlvbkZpZWxkcyA9IG9wdGlvbkZpZWxkcztcbiAgICB0aGlzLm9wdGlvbkZpZWxkc1JlZ0V4ID0gb3B0aW9uRmllbGRzUmVnRXg7XG5cbiAgICB0aGlzLnN1YnR5cGVzID0gZGVmYXVsdFN1YnR5cGVzO1xuXG4gICAgLyoqXG4gICAgICogVXRpbCB0byByZW1vdmUgY29udGVudHMgb2YgRE9NIE9iamVjdFxuICAgICAqIEBwYXJhbSAge09iamVjdH0gZWxlbWVudFxuICAgICAqIEByZXR1cm4ge09iamVjdH0gZWxlbWVudCB3aXRoIGl0cyBjaGlsZHJlbiByZW1vdmVkXG4gICAgICovXG4gICAgdGhpcy5lbXB0eSA9IGVtcHR5O1xuXG4gICAgLyoqXG4gICAgICogSGlkZSBvciBzaG93IGFuIEFycmF5IG9yIEhUTUxDb2xsZWN0aW9uIG9mIGVsZW1lbnRzXG4gICAgICogQHBhcmFtICB7QXJyYXl9ICAgZWxlbXNcbiAgICAgKiBAcGFyYW0gIHtTdHJpbmd9ICB0ZXJtICBtYXRjaCB0ZXh0Q29udGVudCB0byB0aGlzIHRlcm1cbiAgICAgKiBAcGFyYW0gIHtCb29sZWFufSBzaG93ICBvciBoaWRlIGVsZW1lbnRzXG4gICAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgZmlsdGVyZWQgZWxlbWVudHNcbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjtcblxuICAgIGluc3RhbmNlRG9tW2Zvcm1JRF0gPSB0aGlzO1xuICAgIHJldHVybiBpbnN0YW5jZURvbVtmb3JtSURdO1xuICB9XG59XG4iLCIvKipcbiAqIEZvcm0gQnVpbGRlciBldmVudHNcbiAqIEByZXR1cm4ge09iamVjdH0gdmFyaW91cyBldmVudHMgdG8gYmUgdHJpZ2dlclxuICovXG4vLyBmdW5jdGlvbiBmYkV2ZW50cygpe1xuICBjb25zdCBldmVudHMgPSB7fTtcblxuICBldmVudHMubG9hZGVkID0gbmV3IEV2ZW50KCdsb2FkZWQnKTtcbiAgZXZlbnRzLnZpZXdEYXRhID0gbmV3IEV2ZW50KCd2aWV3RGF0YScpO1xuICBldmVudHMudXNlckRlY2xpbmVkID0gbmV3IEV2ZW50KCd1c2VyRGVjbGluZWQnKTtcbiAgZXZlbnRzLm1vZGFsQ2xvc2VkID0gbmV3IEV2ZW50KCdtb2RhbENsb3NlZCcpO1xuICBldmVudHMubW9kYWxPcGVuZWQgPSBuZXcgRXZlbnQoJ21vZGFsT3BlbmVkJyk7XG4gIGV2ZW50cy5mb3JtU2F2ZWQgPSBuZXcgRXZlbnQoJ2Zvcm1TYXZlZCcpO1xuICBldmVudHMuZmllbGRBZGRlZCA9IG5ldyBFdmVudCgnZmllbGRBZGRlZCcpO1xuICBldmVudHMuZmllbGRSZW1vdmVkID0gbmV3IEV2ZW50KCdmaWVsZFJlbW92ZWQnKTtcbiAgZXZlbnRzLmZpZWxkUmVuZGVyZWQgPSBuZXcgRXZlbnQoJ2ZpZWxkUmVuZGVyZWQnKTtcblxuLy8gICByZXR1cm4gZXZlbnRzO1xuLy8gfVxuXG5leHBvcnQgZGVmYXVsdCBldmVudHM7XG4iLCJpbXBvcnQgRG9tIGZyb20gJy4vZG9tJztcbmltcG9ydCB7XG4gIERhdGEsXG4gIGF2YWlsYWJsZWZpZWxkcyBhcyBhRmllbGRzXG59IGZyb20gJy4vZGF0YSc7XG5pbXBvcnQgbWkxOG4gZnJvbSAnbWkxOG4nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgSGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtkZWZhdWx0T3B0aW9ucywgZGVmYXVsdEkxOG4sIGNvbmZpZ30gZnJvbSAnLi9jb25maWcnO1xuXG5yZXF1aXJlKCcuL3BvbHlmaWxscy5qcycpLmRlZmF1bHQ7XG5cbmxldCBpbnN0YW5jZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuY29uc3QgRm9ybUJ1aWxkZXIgPSBmdW5jdGlvbihvcHRzLCBlbGVtZW50KSB7XG4gIGNvbnN0IGZvcm1CdWlsZGVyID0gdGhpcztcbiAgY29uc3QgaTE4biA9IG1pMThuLmN1cnJlbnQ7XG4gIGNvbnN0IGZvcm1JRCA9ICdmcm1iLScgKyBpbnN0YW5jZVRpbWUrKztcbiAgY29uc3QgZGF0YSA9IG5ldyBEYXRhKGZvcm1JRCk7XG4gIGNvbnN0IGQgPSBuZXcgRG9tKGZvcm1JRCk7XG4gIGNvbnN0IGhlbHBlcnMgPSBuZXcgSGVscGVycyhmb3JtSUQpO1xuICBjb25zdCBtID0gdXRpbHMubWFya3VwO1xuXG4gIGNvbnN0IG9yaWdpbmFsT3B0cyA9IG9wdHM7XG5cbiAgb3B0cyA9IGhlbHBlcnMucHJvY2Vzc09wdGlvbnMob3B0cyk7XG5cbiAgY29uc3Qgc3VidHlwZXMgPSBjb25maWcuc3VidHlwZXMgPSBoZWxwZXJzLnByb2Nlc3NTdWJ0eXBlcyhvcHRzLnN1YnR5cGVzKTtcbiAgaGVscGVycy5lZGl0b3JVSShmb3JtSUQpO1xuXG4gIGxldCAkc3RhZ2UgPSAkKGQuc3RhZ2UpO1xuXG4gIGRhdGEubGF5b3V0ID0gaGVscGVycy5lZGl0b3JMYXlvdXQob3B0cy5jb250cm9sUG9zaXRpb24pO1xuICBkYXRhLmZvcm1JRCA9IGZvcm1JRDtcbiAgZGF0YS5sYXN0SUQgPSBgJHtkYXRhLmZvcm1JRH0tZmxkLTFgO1xuXG4gIGxldCBmcm1iRmllbGRzID0gaGVscGVycy5vcmRlckZpZWxkcyhvcHRzLmZpZWxkcyk7XG5cbiAgaWYgKG9wdHMuZGlzYWJsZUZpZWxkcykge1xuICAgIC8vIHJlbW92ZSBkaXNhYmxlZEZpZWxkc1xuICAgIGZybWJGaWVsZHMgPSBmcm1iRmllbGRzLmZpbHRlcihmdW5jdGlvbihmaWVsZCkge1xuICAgICAgcmV0dXJuICF1dGlscy5pbkFycmF5KGZpZWxkLmF0dHJzLnR5cGUsIG9wdHMuZGlzYWJsZUZpZWxkcyk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAob3B0cy5zb3J0YWJsZUNvbnRyb2xzKSB7XG4gICAgZC5jb250cm9scy5jbGFzc0xpc3QuYWRkKCdzb3J0LWVuYWJsZWQnKTtcbiAgfVxuXG4gIGxldCAkY2JVTCA9ICQoZC5jb250cm9scyk7XG5cbiAgLy8gTG9vcCB0aHJvdWdoIGZtcmJGaWVsZHNcbiAgdXRpbHMuZm9yRWFjaChmcm1iRmllbGRzLCAoaSkgPT4ge1xuICAgIGxldCB7YXR0cnMsIGljb24sIC4uLmZpZWxkfSA9IGZybWJGaWVsZHNbaV07XG4gICAgbGV0IGNvbnRyb2xMYWJlbCA9IGZpZWxkLmxhYmVsO1xuICAgIGxldCBpY29uQ2xhc3NOYW1lID0gIWljb24gPyBgaWNvbi0ke2F0dHJzLm5hbWUgfHwgYXR0cnMudHlwZX1gIDogJyc7XG4gICAgaWYgKGljb24pIHtcbiAgICAgIGNvbnRyb2xMYWJlbCA9IGA8c3BhbiBjbGFzcz1cImNvbnRyb2wtaWNvblwiPiR7aWNvbn08L3NwYW4+JHtmaWVsZC5sYWJlbH1gO1xuICAgIH1cbiAgICBsZXQgbmV3RmllbGRDb250cm9sID0gbSgnbGknLFxuICAgICAgbSgnc3BhbicsIGNvbnRyb2xMYWJlbCksXG4gICAgICB7Y2xhc3NOYW1lOiBgJHtpY29uQ2xhc3NOYW1lfSBpbnB1dC1jb250cm9sIGlucHV0LWNvbnRyb2wtJHtpfWB9XG4gICAgKTtcblxuICAgIGFGaWVsZHNbYXR0cnMudHlwZV0gPSBmcm1iRmllbGRzW2ldO1xuICAgIG5ld0ZpZWxkQ29udHJvbC5kYXRhc2V0LnR5cGUgPSBhdHRycy50eXBlO1xuICAgIGQuY29udHJvbHMuYXBwZW5kQ2hpbGQobmV3RmllbGRDb250cm9sKTtcbiAgfSk7XG5cbiAgaWYgKG9wdHMuaW5wdXRTZXRzLmxlbmd0aCkge1xuICAgICQoJzxsaS8+JywgeydjbGFzcyc6ICdmYi1zZXBhcmF0b3InfSkuaHRtbCgnPGhyPicpLmFwcGVuZFRvKCRjYlVMKTtcbiAgICBvcHRzLmlucHV0U2V0cy5mb3JFYWNoKChzZXQsIGkpID0+IHtcbiAgICAgIHNldC5uYW1lID0gc2V0Lm5hbWUgfHwgdXRpbHMubWFrZUNsYXNzTmFtZShzZXQubGFiZWwpO1xuICAgICAgbGV0IGlucHV0U2V0ID0gbSgnbGknLCBzZXQubGFiZWwsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBgaW5wdXQtc2V0LWNvbnRyb2wgaW5wdXQtc2V0LSR7aX1gLFxuICAgICAgICB0eXBlOiBzZXQubmFtZVxuICAgICAgfSk7XG4gICAgICAkKGlucHV0U2V0KS5hcHBlbmRUbygkY2JVTCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBTb3J0YWJsZSBmaWVsZHNcbiAgJHN0YWdlLnNvcnRhYmxlKHtcbiAgICBjdXJzb3I6ICdtb3ZlJyxcbiAgICBvcGFjaXR5OiAwLjksXG4gICAgcmV2ZXJ0OiAxNTAsXG4gICAgYmVmb3JlU3RvcDogKGV2dCwgdWkpID0+IGhlbHBlcnMuYmVmb3JlU3RvcC5jYWxsKGhlbHBlcnMsIGV2dCwgdWkpLFxuICAgIHN0YXJ0OiAoZXZ0LCB1aSkgPT4gaGVscGVycy5zdGFydE1vdmluZy5jYWxsKGhlbHBlcnMsIGV2dCwgdWkpLFxuICAgIHN0b3A6IChldnQsIHVpKSA9PiBoZWxwZXJzLnN0b3BNb3ZpbmcuY2FsbChoZWxwZXJzLCBldnQsIHVpKSxcbiAgICBjYW5jZWw6ICdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgLmRpc2FibGVkLWZpZWxkLCAuZm9ybS1lbGVtZW50cywgLmJ0biwgYnV0dG9uJyxcbiAgICBwbGFjZWhvbGRlcjogJ2ZybWItcGxhY2Vob2xkZXInLFxuICB9KTtcblxuICAvLyBDb250cm9sQm94IHdpdGggZGlmZmVyZW50IGZpZWxkc1xuICAkY2JVTC5zb3J0YWJsZSh7XG4gICAgaGVscGVyOiAnY2xvbmUnLFxuICAgIG9wYWNpdHk6IDAuOSxcbiAgICBjb25uZWN0V2l0aDogJHN0YWdlLFxuICAgIGNhbmNlbDogJy5mYi1zZXBhcmF0b3InLFxuICAgIGN1cnNvcjogJ21vdmUnLFxuICAgIHNjcm9sbDogZmFsc2UsXG4gICAgcGxhY2Vob2xkZXI6ICd1aS1zdGF0ZS1oaWdobGlnaHQnLFxuICAgIHN0YXJ0OiAoZXZ0LCB1aSkgPT4gaGVscGVycy5zdGFydE1vdmluZy5jYWxsKGhlbHBlcnMsIGV2dCwgdWkpLFxuICAgIHN0b3A6IChldnQsIHVpKSA9PiBoZWxwZXJzLnN0b3BNb3ZpbmcuY2FsbChoZWxwZXJzLCBldnQsIHVpKSxcbiAgICByZXZlcnQ6IDE1MCxcbiAgICBiZWZvcmVTdG9wOiAoZXZ0LCB1aSkgPT4gaGVscGVycy5iZWZvcmVTdG9wLmNhbGwoaGVscGVycywgZXZ0LCB1aSksXG4gICAgZGlzdGFuY2U6IDMsXG4gICAgdXBkYXRlOiBmdW5jdGlvbihldmVudCwgdWkpIHtcbiAgICAgIGlmIChoZWxwZXJzLmRvQ2FuY2VsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVpLml0ZW0ucGFyZW50KClbMF0gPT09IGQuc3RhZ2UpIHtcbiAgICAgICAgaGVscGVycy5kb0NhbmNlbCA9IHRydWU7XG4gICAgICAgIHByb2Nlc3NDb250cm9sKHVpLml0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVscGVycy5zZXRGaWVsZE9yZGVyKCRjYlVMKTtcbiAgICAgICAgaGVscGVycy5kb0NhbmNlbCA9ICFvcHRzLnNvcnRhYmxlQ29udHJvbHM7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBsZXQgcHJvY2Vzc0NvbnRyb2wgPSBjb250cm9sID0+IHtcbiAgICBpZiAoY29udHJvbFswXS5jbGFzc0xpc3QuY29udGFpbnMoJ2lucHV0LXNldC1jb250cm9sJykpIHtcbiAgICAgIGxldCBpbnB1dFNldHMgPSBbXTtcbiAgICAgIGxldCBpbnB1dFNldCA9IG9wdHMuaW5wdXRTZXRzLmZpbHRlcihzZXQgPT5cbiAgICAgICAgc2V0Lm5hbWUgPT09IGNvbnRyb2xbMF0udHlwZSlbMF07XG4gICAgICBpZiAoaW5wdXRTZXQuc2hvd0hlYWRlcikge1xuICAgICAgICBsZXQgaGVhZGVyID0ge1xuICAgICAgICAgICAgdHlwZTogJ2hlYWRlcicsXG4gICAgICAgICAgICBzdWJ0eXBlOiAnaDInLFxuICAgICAgICAgICAgaWQ6IGlucHV0U2V0Lm5hbWUsXG4gICAgICAgICAgICBsYWJlbDogaW5wdXRTZXQubGFiZWxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlucHV0U2V0cy5wdXNoKGhlYWRlcik7XG4gICAgICB9XG4gICAgICBpbnB1dFNldHMucHVzaCguLi5pbnB1dFNldC5maWVsZHMpO1xuICAgICAgaW5wdXRTZXRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBwcmVwRmllbGRWYXJzKGZpZWxkLCB0cnVlKTtcbiAgICAgICAgaWYgKGhlbHBlcnMuc3RvcEluZGV4IHx8IGhlbHBlcnMuc3RvcEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgaGVscGVycy5zdG9wSW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZXBGaWVsZFZhcnMoY29udHJvbCwgdHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGQuZWRpdG9yV3JhcCA9IG0oJ2RpdicsIG51bGwsIHtcbiAgICBpZDogYCR7ZGF0YS5mb3JtSUR9LWZvcm0td3JhcGAsXG4gICAgY2xhc3NOYW1lOiAnZm9ybS13cmFwIGZvcm0tYnVpbGRlcicgKyB1dGlscy5tb2JpbGVDbGFzcygpXG4gIH0pO1xuXG4gIGxldCAkZWRpdG9yV3JhcCA9ICQoZC5lZGl0b3JXcmFwKTtcblxuICBsZXQgY2JXcmFwID0gbSgnZGl2JywgZC5jb250cm9scywge1xuICAgIGlkOiBgJHtkYXRhLmZvcm1JRH0tY2Itd3JhcGAsXG4gICAgY2xhc3NOYW1lOiAnY2Itd3JhcCAnICsgZGF0YS5sYXlvdXQuY29udHJvbHNcbiAgfSk7XG5cbiAgaWYgKG9wdHMuc2hvd0FjdGlvbkJ1dHRvbnMpIHtcbiAgICBjb25zdCBidXR0b25zID0gb3B0cy5hY3Rpb25CdXR0b25zLm1hcChidG5EYXRhID0+IHtcbiAgICAgIGlmIChidG5EYXRhLmlkICYmIG9wdHMuZGlzYWJsZWRBY3Rpb25CdXR0b25zLmluZGV4T2YoYnRuRGF0YS5pZCkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLnByb2Nlc3NBY3Rpb25CdXR0b25zKGJ0bkRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1BY3Rpb25zID0gZC5mb3JtQWN0aW9ucyA9IG0oJ2RpdicsIGJ1dHRvbnMsIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Zvcm0tYWN0aW9ucyBidG4tZ3JvdXAnXG4gICAgfSk7XG5cbiAgICBjYldyYXAuYXBwZW5kQ2hpbGQoZm9ybUFjdGlvbnMpO1xuICB9XG5cbiAgbGV0IHN0YWdlV3JhcCA9IG0oJ2RpdicsIFtkLnN0YWdlLCBjYldyYXBdLCB7XG4gICAgaWQ6IGAke2RhdGEuZm9ybUlEfS1zdGFnZS13cmFwYCxcbiAgICBjbGFzc05hbWU6ICdzdGFnZS13cmFwICcgKyBkYXRhLmxheW91dC5zdGFnZVxuICB9KTtcblxuICAkZWRpdG9yV3JhcC5hcHBlbmQoc3RhZ2VXcmFwLCBjYldyYXApO1xuXG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICAkKGVsZW1lbnQpLmFwcGVuZCgkZWRpdG9yV3JhcCk7XG4gIH0gZWxzZSB7XG4gICAgJChlbGVtZW50KS5yZXBsYWNlV2l0aCgkZWRpdG9yV3JhcCk7XG4gIH1cblxuICBsZXQgc2F2ZUFuZFVwZGF0ZSA9IHV0aWxzLmRlYm91bmNlKGV2dCA9PiB7XG4gICAgaWYgKGV2dCkge1xuICAgICAgaWYgKGV2dC50eXBlID09PSAna2V5dXAnICYmIGV2dC50YXJnZXQubmFtZSA9PT0gJ2NsYXNzTmFtZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBsZXQgJGZpZWxkID0gJChldnQudGFyZ2V0KS5jbG9zZXN0KCcuZm9ybS1maWVsZCcpO1xuICAgICAgaGVscGVycy51cGRhdGVQcmV2aWV3KCRmaWVsZCk7XG4gICAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFNhdmUgZmllbGQgb24gY2hhbmdlXG4gICRzdGFnZS5vbignY2hhbmdlIGJsdXIga2V5dXAnLCAnLmZvcm0tZWxlbWVudHMgaW5wdXQsIC5mb3JtLWVsZW1lbnRzIHNlbGVjdCwgLmZvcm0tZWxlbWVudHMgdGV4dGFyZWEnLCBzYXZlQW5kVXBkYXRlKTtcblxuICAkKCdsaScsIGQuY29udHJvbHMpLmNsaWNrKGV2dCA9PiB7XG4gICAgbGV0ICRjb250cm9sID0gJChldnQudGFyZ2V0KS5jbG9zZXN0KCdsaScpO1xuICAgIGhlbHBlcnMuc3RvcEluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHByb2Nlc3NDb250cm9sKCRjb250cm9sKTtcbiAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFwcGVuZCBhbmQgcHJlcGVuZCBvcHRpb25zIGlmIG5lY2Vzc2FyeVxuICBsZXQgbm9uRWRpdGFibGVGaWVsZHMgPSAoKSA9PiB7XG4gICAgbGV0IGNhbmNlbEFycmF5ID0gW107XG4gICAgY29uc3QgZGlzYWJsZWRGaWVsZCA9IHR5cGUgPT5cbiAgICB1dGlscy5tYXJrdXAoJ2xpJywgb3B0c1t0eXBlXSwge1xuICAgICAgY2xhc3NOYW1lOiBgZGlzYWJsZWQtZmllbGQgZm9ybS0ke3R5cGV9YFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdHMucHJlcGVuZCAmJiAhJCgnLmRpc2FibGVkLWZpZWxkLmZvcm0tcHJlcGVuZCcsIGQuc3RhZ2UpLmxlbmd0aCkge1xuICAgICAgY2FuY2VsQXJyYXkucHVzaCh0cnVlKTtcbiAgICAgICRzdGFnZS5wcmVwZW5kKGRpc2FibGVkRmllbGQoJ3ByZXBlbmQnKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuYXBwZW5kICYmICEkKCcuZGlzYWJsZWQtZmllbGQuZm9ybS0uYXBwZW5kJywgZC5zdGFnZSkubGVuZ3RoKSB7XG4gICAgICBjYW5jZWxBcnJheS5wdXNoKHRydWUpO1xuICAgICAgJHN0YWdlLmFwcGVuZChkaXNhYmxlZEZpZWxkKCdhcHBlbmQnKSk7XG4gICAgfVxuXG4gICAgaGVscGVycy5kaXNhYmxlZFRUKGQuc3RhZ2UpO1xuICAgIHJldHVybiBjYW5jZWxBcnJheS5zb21lKGVsZW0gPT4gZWxlbSA9PT0gdHJ1ZSk7XG4gIH07XG5cbiAgbGV0IHByZXBGaWVsZFZhcnMgPSBmdW5jdGlvbigkZmllbGQsIGlzTmV3ID0gZmFsc2UpIHtcbiAgICBsZXQgZmllbGQgPSB7fTtcbiAgICBpZiAoJGZpZWxkIGluc3RhbmNlb2YgalF1ZXJ5KSB7XG4gICAgICBsZXQge2F0dHJzLCBsYWJlbH0gPSBhRmllbGRzWyRmaWVsZFswXS5kYXRhc2V0LnR5cGVdO1xuICAgICAgaWYgKGFGaWVsZHNbJGZpZWxkWzBdLmRhdGFzZXQudHlwZV0pIHtcbiAgICAgICAgZmllbGQgPSBPYmplY3QuYXNzaWduKHt9LCBhdHRycyk7XG4gICAgICAgIGZpZWxkLmxhYmVsID0gbGFiZWw7XG4gICAgICB9IGVsc2UgeyAvLyBpcyBkYXRhVHlwZSBYTUxcbiAgICAgICAgbGV0IGF0dHJzID0gJGZpZWxkWzBdLmF0dHJpYnV0ZXM7XG4gICAgICAgIGlmICghaXNOZXcpIHtcbiAgICAgICAgICBmaWVsZC52YWx1ZXMgPSAkZmllbGQuY2hpbGRyZW4oKS5tYXAoKGluZGV4LCBlbGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBsYWJlbDogJChlbGVtKS50ZXh0KCksXG4gICAgICAgICAgICAgIHZhbHVlOiAkKGVsZW0pLmF0dHIoJ3ZhbHVlJyksXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBCb29sZWFuKCQoZWxlbSkuYXR0cignc2VsZWN0ZWQnKSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gYXR0cnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBmaWVsZFthdHRyc1tpXS5uYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkID0gT2JqZWN0LmFzc2lnbih7fSwgJGZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpZWxkLm5hbWUpIHtcbiAgICAgIGZpZWxkLm5hbWUgPSB1dGlscy5uYW1lQXR0cihmaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmV3ICYmIHV0aWxzLmluQXJyYXkoZmllbGQudHlwZSxcbiAgICAgIFsndGV4dCcsXG4gICAgICAgJ251bWJlcicsXG4gICAgICAgJ2ZpbGUnLFxuICAgICAgICdkYXRlJyxcbiAgICAgICAnc2VsZWN0JyxcbiAgICAgICAndGV4dGFyZWEnLFxuICAgICAgICdhdXRvY29tcGxldGUnXSkpIHtcbiAgICAgIGZpZWxkLmNsYXNzTmFtZSA9IGZpZWxkLmNsYXNzTmFtZSB8fCAnZm9ybS1jb250cm9sJztcbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGQuY2xhc3NOYW1lID0gZmllbGQuY2xhc3NOYW1lO1xuICAgIH1cblxuICAgIGxldCBtYXRjaCA9IC8oPzpefFxccylidG4tKC4qPykoPzpcXHN8JCkvZy5leGVjKGZpZWxkLmNsYXNzTmFtZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBmaWVsZC5zdHlsZSA9IG1hdGNoWzFdO1xuICAgIH1cblxuICAgIHV0aWxzLmVzY2FwZUF0dHJzKGZpZWxkKTtcblxuICAgIGFwcGVuZE5ld0ZpZWxkKGZpZWxkLCBpc05ldyk7XG5cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnRzLmZpZWxkQWRkZWQpO1xuICAgIH1cblxuICAgIHN0YWdlV3JhcC5jbGFzc0xpc3QucmVtb3ZlKCdlbXB0eScpO1xuICB9O1xuXG4gIC8vIFBhcnNlIHNhdmVkIFhNTCB0ZW1wbGF0ZSBkYXRhXG4gIGxldCBsb2FkRmllbGRzID0gZnVuY3Rpb24oZm9ybURhdGEpIHtcbiAgICBmb3JtRGF0YSA9IGhlbHBlcnMuZ2V0RGF0YShmb3JtRGF0YSk7XG4gICAgaWYgKGZvcm1EYXRhICYmIGZvcm1EYXRhLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZmllbGREYXRhID0gdXRpbHMudHJpbU9iaihmb3JtRGF0YVtpXSk7XG4gICAgICAgIHByZXBGaWVsZFZhcnMoZmllbGREYXRhKTtcbiAgICAgIH1cbiAgICAgIHN0YWdlV3JhcC5jbGFzc0xpc3QucmVtb3ZlKCdlbXB0eScpO1xuICAgIH0gZWxzZSBpZiAob3B0cy5kZWZhdWx0RmllbGRzICYmIG9wdHMuZGVmYXVsdEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIC8vIExvYWQgZGVmYXVsdCBmaWVsZHMgaWYgbm9uZSBhcmUgc2V0XG4gICAgICBvcHRzLmRlZmF1bHRGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiBwcmVwRmllbGRWYXJzKGZpZWxkKSk7XG4gICAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LnJlbW92ZSgnZW1wdHknKTtcbiAgICB9IGVsc2UgaWYgKCFvcHRzLnByZXBlbmQgJiYgIW9wdHMuYXBwZW5kKSB7XG4gICAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LmFkZCgnZW1wdHknKTtcbiAgICAgIHN0YWdlV3JhcC5kYXRhc2V0LmNvbnRlbnQgPSBpMThuLmdldFN0YXJ0ZWQ7XG4gICAgfVxuICAgIGhlbHBlcnMuc2F2ZS5jYWxsKGhlbHBlcnMpO1xuXG4gICAgaWYgKG5vbkVkaXRhYmxlRmllbGRzKCkpIHtcbiAgICAgIHN0YWdlV3JhcC5jbGFzc0xpc3QucmVtb3ZlKCdlbXB0eScpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQWRkIGRhdGEgZm9yIGZpZWxkIHdpdGggb3B0aW9ucyBbc2VsZWN0LCBjaGVja2JveC1ncm91cCwgcmFkaW8tZ3JvdXBdXG4gICAqXG4gICAqIEB0b2RvICAgcmVmYWN0b3IgdGhpcyBuYXN0eSB+Y3JhcH4gY29kZSwgaXRzIGFjdHVhbGx5IHBhaW5mdWwgdG8gbG9vayBhdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGZpZWxkIG9wdGlvbnMgbWFya3VwXG4gICAqL1xuICBsZXQgZmllbGRPcHRpb25zID0gZnVuY3Rpb24oZmllbGREYXRhKSB7XG4gICAgbGV0IG9wdGlvbkFjdGlvbnMgPSBbXG4gICAgICAgIHV0aWxzLm1hcmt1cCgnYScsIGkxOG4uYWRkT3B0aW9uLCB7Y2xhc3NOYW1lOiAnYWRkIGFkZC1vcHQnfSlcbiAgICAgIF07XG4gICAgbGV0IGZpZWxkT3B0aW9ucyA9IFtcbiAgICAgIGA8bGFiZWwgY2xhc3M9XCJmYWxzZS1sYWJlbFwiPiR7aTE4bi5zZWxlY3RPcHRpb25zfTwvbGFiZWw+YFxuICAgIF07XG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IGZpZWxkRGF0YS5tdWx0aXBsZSB8fCAoZmllbGREYXRhLnR5cGUgPT09ICdjaGVja2JveC1ncm91cCcpO1xuICAgIGNvbnN0IG9wdGlvbkRhdGFUZW1wbGF0ZSA9IGxhYmVsID0+IHtcbiAgICAgIGxldCBvcHRpb25EYXRhID0ge1xuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIHZhbHVlOiB1dGlscy5oeXBoZW5DYXNlKGxhYmVsKVxuICAgICAgfTtcblxuICAgICAgaWYgKGZpZWxkRGF0YS50eXBlICE9PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgICBvcHRpb25EYXRhLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcHRpb25EYXRhO1xuICAgIH07XG5cbiAgICBpZiAoIWZpZWxkRGF0YS52YWx1ZXMgfHwgIWZpZWxkRGF0YS52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICBsZXQgZGVmYXVsdE9wdENvdW50ID0gdXRpbHMuaW5BcnJheShmaWVsZERhdGEudHlwZSwgWydjaGVja2JveC1ncm91cCcsICdjaGVja2JveCddKSA/IFsxXSA6IFsxLCAyLCAzXTtcbiAgICAgIGZpZWxkRGF0YS52YWx1ZXMgPSBkZWZhdWx0T3B0Q291bnQubWFwKGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgIGxldCBsYWJlbCA9IGAke2kxOG4ub3B0aW9ufSAke2luZGV4fWA7XG4gICAgICAgIHJldHVybiBvcHRpb25EYXRhVGVtcGxhdGUobGFiZWwpO1xuICAgICAgfSk7XG5cbiAgICBsZXQgZmlyc3RPcHRpb24gPSBmaWVsZERhdGEudmFsdWVzWzBdO1xuICAgICAgaWYgKGZpcnN0T3B0aW9uLmhhc093blByb3BlcnR5KCdzZWxlY3RlZCcpKSB7XG4gICAgICAgIGZpcnN0T3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZW5zdXJlIG9wdGlvbiBkYXRhIGlzIGhhcyBhbGwgcmVxdWlyZWQga2V5c1xuICAgICAgZmllbGREYXRhLnZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiBPYmplY3QuYXNzaWduKHt9LCB7c2VsZWN0ZWQ6IGZhbHNlfSwgb3B0aW9uKSk7XG4gICAgfVxuXG4gICAgZmllbGRPcHRpb25zLnB1c2goJzxkaXYgY2xhc3M9XCJzb3J0YWJsZS1vcHRpb25zLXdyYXBcIj4nKTtcblxuICAgIGZpZWxkT3B0aW9ucy5wdXNoKCc8b2wgY2xhc3M9XCJzb3J0YWJsZS1vcHRpb25zXCI+Jyk7XG4gICAgdXRpbHMuZm9yRWFjaChmaWVsZERhdGEudmFsdWVzLCBpID0+IHtcbiAgICAgIGZpZWxkT3B0aW9ucy5wdXNoKHNlbGVjdEZpZWxkT3B0aW9ucyhmaWVsZERhdGEubmFtZSwgZmllbGREYXRhLnZhbHVlc1tpXSwgaXNNdWx0aXBsZSkpO1xuICAgIH0pO1xuICAgIGZpZWxkT3B0aW9ucy5wdXNoKCc8L29sPicpO1xuICAgIGZpZWxkT3B0aW9ucy5wdXNoKHV0aWxzLm1hcmt1cCgnZGl2Jywgb3B0aW9uQWN0aW9ucywge2NsYXNzTmFtZTogJ29wdGlvbi1hY3Rpb25zJ30pLm91dGVySFRNTCk7XG4gICAgZmllbGRPcHRpb25zLnB1c2goJzwvZGl2PicpO1xuXG4gICAgcmV0dXJuIHV0aWxzLm1hcmt1cCgnZGl2JywgZmllbGRPcHRpb25zLmpvaW4oJycpLCB7Y2xhc3NOYW1lOiAnZm9ybS1ncm91cCBmaWVsZC1vcHRpb25zJ30pLm91dGVySFRNTDtcbiAgfTtcblxuICBjb25zdCBkZWZhdWx0RmllbGRBdHRycyA9IHR5cGUgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRBdHRycyA9IFtcbiAgICAgICdyZXF1aXJlZCcsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICdwbGFjZWhvbGRlcicsXG4gICAgICAnY2xhc3NOYW1lJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdhY2Nlc3MnLFxuICAgICAgJ3ZhbHVlJ1xuICAgIF07XG4gICAgbGV0IG5vVmFsRmllbGRzID0gWydoZWFkZXInLCAncGFyYWdyYXBoJywgJ2ZpbGUnLCAnYXV0b2NvbXBsZXRlJ10uY29uY2F0KGQub3B0aW9uRmllbGRzKTtcbiAgICBsZXQgdmFsdWVGaWVsZCA9ICF1dGlscy5pbkFycmF5KHR5cGUsIG5vVmFsRmllbGRzKTtcblxuICAgIGNvbnN0IHR5cGVBdHRyc01hcCA9IHtcbiAgICAgIGF1dG9jb21wbGV0ZTogZGVmYXVsdEF0dHJzLmNvbmNhdChbXG4gICAgICAgICdvcHRpb25zJyxcbiAgICAgIF0pLFxuICAgICAgYnV0dG9uOiBbXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdzdWJ0eXBlJyxcbiAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ2FjY2VzcycsXG4gICAgICBdLFxuICAgICAgY2hlY2tib3g6IFtcbiAgICAgICAgJ3JlcXVpcmVkJyxcbiAgICAgICAgJ2xhYmVsJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ3RvZ2dsZScsXG4gICAgICAgICdpbmxpbmUnLFxuICAgICAgICAnY2xhc3NOYW1lJyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnYWNjZXNzJyxcbiAgICAgICAgJ290aGVyJyxcbiAgICAgICAgJ29wdGlvbnMnLFxuICAgICAgXSxcbiAgICAgIHRleHQ6IGRlZmF1bHRBdHRycy5jb25jYXQoW1xuICAgICAgICAnc3VidHlwZScsXG4gICAgICAgICdtYXhsZW5ndGgnLFxuICAgICAgXSksXG4gICAgICBkYXRlOiBkZWZhdWx0QXR0cnMsXG4gICAgICBmaWxlOiBkZWZhdWx0QXR0cnMuY29uY2F0KFtcbiAgICAgICAgJ211bHRpcGxlJ1xuICAgICAgXSksXG4gICAgICBoZWFkZXI6IFtcbiAgICAgICAgJ2xhYmVsJyxcbiAgICAgICAgJ3N1YnR5cGUnLFxuICAgICAgICAnY2xhc3NOYW1lJyxcbiAgICAgICAgJ2FjY2VzcycsXG4gICAgICBdLFxuICAgICAgaGlkZGVuOiBbXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ2FjY2VzcycsXG4gICAgICBdLFxuICAgICAgcGFyYWdyYXBoOiBbXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdzdWJ0eXBlJyxcbiAgICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAgICdhY2Nlc3MnLFxuICAgICAgXSxcbiAgICAgIG51bWJlcjogZGVmYXVsdEF0dHJzLmNvbmNhdChbXG4gICAgICAgICdtaW4nLFxuICAgICAgICAnbWF4JyxcbiAgICAgICAgJ3N0ZXAnLFxuICAgICAgXSksXG4gICAgICBzZWxlY3Q6IGRlZmF1bHRBdHRycy5jb25jYXQoW1xuICAgICAgICAnbXVsdGlwbGUnLFxuICAgICAgICAnb3B0aW9ucycsXG4gICAgICBdKSxcbiAgICAgIHRleHRhcmVhOiBkZWZhdWx0QXR0cnMuY29uY2F0KFtcbiAgICAgICAgJ3N1YnR5cGUnLFxuICAgICAgICAnbWF4bGVuZ3RoJyxcbiAgICAgICAgJ3Jvd3MnLFxuICAgICAgXSksXG5cbiAgICB9O1xuXG4gICAgdHlwZUF0dHJzTWFwWydjaGVja2JveC1ncm91cCddID0gdHlwZUF0dHJzTWFwLmNoZWNrYm94O1xuICAgIHR5cGVBdHRyc01hcFsncmFkaW8tZ3JvdXAnXSA9IHR5cGVBdHRyc01hcC5jaGVja2JveDtcblxuICAgIGxldCB0eXBlQXR0cnMgPSB0eXBlQXR0cnNNYXBbdHlwZV07XG5cbiAgICBpZiAodHlwZSA9PT0gJ3JhZGlvLWdyb3VwJykge1xuICAgICAgdXRpbHMucmVtb3ZlKCd0b2dnbGUnLCB0eXBlQXR0cnMpO1xuICAgIH1cblxuICAgIC8vIEhlbHAgVGV4dCAvIERlc2NyaXB0aW9uIEZpZWxkXG4gICAgaWYgKHV0aWxzLmluQXJyYXkodHlwZSwgWydoZWFkZXInLCAncGFyYWdyYXBoJywgJ2J1dHRvbiddKSkge1xuICAgICAgdXRpbHMucmVtb3ZlKCdkZXNjcmlwdGlvbicsIHR5cGVBdHRycyk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZUZpZWxkKSB7XG4gICAgICB1dGlscy5yZW1vdmUoJ3ZhbHVlJywgdHlwZUF0dHJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZUF0dHJzIHx8IGRlZmF1bHRBdHRycztcbiAgfTtcblxuICAvKipcbiAgICogQnVpbGQgdGhlIGVkaXRhYmxlIHByb3BlcnRpZXMgZm9yIHRoZSBmaWVsZFxuICAgKiBAcGFyYW0gIHtvYmplY3R9IHZhbHVlcyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgYWR2YW5jZWQgZmllbGRzXG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgIG1hcmt1cCBmb3IgYWR2YW5jZWQgZmllbGRzXG4gICAqL1xuICBsZXQgYWR2RmllbGRzID0gdmFsdWVzID0+IHtcbiAgICBsZXQgYWR2RmllbGRzID0gW107XG4gICAgbGV0IGZpZWxkQXR0cnMgPSBkZWZhdWx0RmllbGRBdHRycyh2YWx1ZXMudHlwZSk7XG4gICAgY29uc3QgYWR2RmllbGRNYXAgPSB7XG4gICAgICByZXF1aXJlZDogKCkgPT4gcmVxdWlyZWRGaWVsZCh2YWx1ZXMpLFxuICAgICAgdG9nZ2xlOiAoKSA9PiBib29sQXR0cmlidXRlKCd0b2dnbGUnLCB2YWx1ZXMsIHtmaXJzdDogaTE4bi50b2dnbGV9KSxcbiAgICAgIGlubGluZTogKCkgPT4ge1xuICAgICAgICBsZXQgbGFiZWxzID0ge1xuICAgICAgICAgIGZpcnN0OiBpMThuLmlubGluZSxcbiAgICAgICAgICBzZWNvbmQ6IG1pMThuLmdldCgnaW5saW5lRGVzYycsIHZhbHVlcy50eXBlLnJlcGxhY2UoJy1ncm91cCcsICcnKSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gYm9vbEF0dHJpYnV0ZSgnaW5saW5lJywgdmFsdWVzLCBsYWJlbHMpO1xuICAgICAgfSxcbiAgICAgIGxhYmVsOiAoKSA9PiB0ZXh0QXR0cmlidXRlKCdsYWJlbCcsIHZhbHVlcyksXG4gICAgICBkZXNjcmlwdGlvbjogKCkgPT4gdGV4dEF0dHJpYnV0ZSgnZGVzY3JpcHRpb24nLCB2YWx1ZXMpLFxuICAgICAgc3VidHlwZTogKCkgPT4gc2VsZWN0QXR0cmlidXRlKCdzdWJ0eXBlJywgdmFsdWVzLCBzdWJ0eXBlc1t2YWx1ZXMudHlwZV0pLFxuICAgICAgc3R5bGU6ICgpID0+IGJ0blN0eWxlcyh2YWx1ZXMuc3R5bGUpLFxuICAgICAgcGxhY2Vob2xkZXI6ICgpID0+IHRleHRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJywgdmFsdWVzKSxcbiAgICAgIHJvd3M6ICgpID0+IG51bWJlckF0dHJpYnV0ZSgncm93cycsIHZhbHVlcyksXG4gICAgICBjbGFzc05hbWU6ICgpID0+IHRleHRBdHRyaWJ1dGUoJ2NsYXNzTmFtZScsIHZhbHVlcyksXG4gICAgICBuYW1lOiAoKSA9PiB0ZXh0QXR0cmlidXRlKCduYW1lJywgdmFsdWVzKSxcbiAgICAgIHZhbHVlOiAoKSA9PiB0ZXh0QXR0cmlidXRlKCd2YWx1ZScsIHZhbHVlcyksXG4gICAgICBtYXhsZW5ndGg6ICgpID0+IG51bWJlckF0dHJpYnV0ZSgnbWF4bGVuZ3RoJywgdmFsdWVzKSxcbiAgICAgIGFjY2VzczogKCkgPT4ge1xuICAgICAgICBsZXQgcm9sZXNEaXNwbGF5ID0gdmFsdWVzLnJvbGUgIT09IHVuZGVmaW5lZCA/ICdzdHlsZT1cImRpc3BsYXk6YmxvY2tcIicgOiAnJztcbiAgICAgICAgbGV0IGF2YWlsYWJsZVJvbGVzID0gW1xuICAgICAgICAgIGA8ZGl2IGNsYXNzPVwiYXZhaWxhYmxlLXJvbGVzXCIgJHtyb2xlc0Rpc3BsYXl9PmBcbiAgICAgICAgXTtcbiAgICAgICAgZm9yIChrZXkgaW4gb3B0cy5yb2xlcykge1xuICAgICAgICAgIGlmIChvcHRzLnJvbGVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGxldCBjaGVja2VkID0gdXRpbHMuaW5BcnJheShrZXksIHJvbGVzKSA/ICdjaGVja2VkJyA6ICcnO1xuICAgICAgICAgICAgbGV0IHJvbGVJZCA9IGBmbGQtJHtkYXRhLmxhc3RJRH0tcm9sZXMtJHtrZXl9YDtcbiAgICAgICAgICAgIGF2YWlsYWJsZVJvbGVzLnB1c2goYDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwicm9sZXNbXVwiIHZhbHVlPVwiJHtrZXl9XCIgaWQ9XCIke3JvbGVJZH1cIiAke2NoZWNrZWR9IGNsYXNzPVwicm9sZXMtZmllbGRcIiAvPiA8bGFiZWwgZm9yPVwiJHtyb2xlSWR9XCI+JHtvcHRzLnJvbGVzW2tleV19PC9sYWJlbD48YnIvPmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhdmFpbGFibGVSb2xlcy5wdXNoKCc8L2Rpdj4nKTtcbiAgICAgICAgbGV0IGFjY2Vzc0xhYmVscyA9IHtmaXJzdDogaTE4bi5yb2xlcywgc2Vjb25kOiBpMThuLmxpbWl0Um9sZSwgY29udGVudDogYXZhaWxhYmxlUm9sZXMuam9pbignJyl9O1xuXG4gICAgICAgIHJldHVybiBib29sQXR0cmlidXRlKCdhY2Nlc3MnLCB2YWx1ZXMsIGFjY2Vzc0xhYmVscyk7XG4gICAgICB9LFxuICAgICAgb3RoZXI6ICgpID0+IGJvb2xBdHRyaWJ1dGUoJ290aGVyJywgdmFsdWVzLCB7Zmlyc3Q6IGkxOG4uZW5hYmxlT3RoZXIsIHNlY29uZDogaTE4bi5lbmFibGVPdGhlck1zZ30pLFxuICAgICAgb3B0aW9uczogKCkgPT4gZmllbGRPcHRpb25zKHZhbHVlcylcbiAgICB9O1xuICAgIGxldCBrZXk7XG4gICAgbGV0IHJvbGVzID0gdmFsdWVzLnJvbGUgIT09IHVuZGVmaW5lZCA/IHZhbHVlcy5yb2xlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBsZXQgbnVtQXR0cnMgPSBbJ21pbicsICdtYXgnLCAnc3RlcCddO1xuXG4gICAgaWYgKHZhbHVlcy50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgbnVtQXR0cnMuZm9yRWFjaChudW1BdHRyID0+IHtcbiAgICAgICAgYWR2RmllbGRNYXBbbnVtQXR0cl0gPSAoKSA9PiBudW1iZXJBdHRyaWJ1dGUobnVtQXR0ciwgdmFsdWVzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZXMudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICBhZHZGaWVsZE1hcFsnbXVsdGlwbGUnXSA9ICgpID0+IHtcbiAgICAgICAgbGV0IGxhYmVscyA9IHtcbiAgICAgICAgICBmaXJzdDogaTE4bi5tdWx0aXBsZUZpbGVzLFxuICAgICAgICAgIHNlY29uZDogaTE4bi5hbGxvd011bHRpcGxlRmlsZXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGJvb2xBdHRyaWJ1dGUoJ211bHRpcGxlJywgdmFsdWVzLCBsYWJlbHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLnR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICBhZHZGaWVsZE1hcFsnbXVsdGlwbGUnXSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGJvb2xBdHRyaWJ1dGUoJ211bHRpcGxlJywgdmFsdWVzLCB7Zmlyc3Q6ICcgJywgc2Vjb25kOiBpMThuLnNlbGVjdGlvbnNNZXNzYWdlfSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKGZpZWxkQXR0cnMpLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgbGV0IGF0dHIgPSBmaWVsZEF0dHJzW2luZGV4XTtcbiAgICAgIGxldCB1c2VEZWZhdWx0QXR0ciA9IFt0cnVlXTtcblxuICAgICAgaWYgKG9wdHMudHlwZVVzZXJEaXNhYmxlZEF0dHJzW3ZhbHVlcy50eXBlXSkge1xuICAgICAgICBsZXQgdHlwZURpc2FibGVkQXR0cnMgPSBvcHRzLnR5cGVVc2VyRGlzYWJsZWRBdHRyc1t2YWx1ZXMudHlwZV07XG4gICAgICAgIHVzZURlZmF1bHRBdHRyLnB1c2goIXV0aWxzLmluQXJyYXkoYXR0ciwgdHlwZURpc2FibGVkQXR0cnMpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV0pIHtcbiAgICAgICAgbGV0IHVzZXJBdHRycyA9IE9iamVjdC5rZXlzKG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV0pO1xuICAgICAgICB1c2VEZWZhdWx0QXR0ci5wdXNoKCF1dGlscy5pbkFycmF5KGF0dHIsIHVzZXJBdHRycykpO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaW5BcnJheShhdHRyLCBvcHRzLmRpc2FibGVkQXR0cnMpKSB7XG4gICAgICAgIHVzZURlZmF1bHRBdHRyLnB1c2goZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlRGVmYXVsdEF0dHIuZXZlcnkodXNlID0+IHVzZSA9PT0gdHJ1ZSkpIHtcbiAgICAgICAgYWR2RmllbGRzLnB1c2goYWR2RmllbGRNYXBbYXR0cl0oKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBcHBlbmQgY3VzdG9tIGF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0eXBlVXNlckF0dHJzIG9wdGlvblxuICAgIGlmIChvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdKSB7XG4gICAgICBhZHZGaWVsZHMucHVzaChwcm9jZXNzVHlwZVVzZXJBdHRycyhvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdLCB2YWx1ZXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWR2RmllbGRzLmpvaW4oJycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgdHlwZVVzZXJBdHRyc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IHR5cGVVc2VyQXR0ciBvcHRpb25cbiAgICogQHBhcmFtICB7T2JqZWN0fSB2YWx1ZXMgICAgICAgZmllbGQgYXR0cmlidXRlc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICAgICAgICBtYXJrdXAgZm9yIGN1c3RvbSB1c2VyIGF0dHJpYnV0ZXNcbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NUeXBlVXNlckF0dHJzKHR5cGVVc2VyQXR0ciwgdmFsdWVzKSB7XG4gICAgbGV0IGFkdkZpZWxkID0gW107XG5cbiAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gdHlwZVVzZXJBdHRyKSB7XG4gICAgICBpZiAodHlwZVVzZXJBdHRyLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZSkpIHtcbiAgICAgICAgbGV0IG9yaWcgPSBpMThuW2F0dHJpYnV0ZV07XG4gICAgICAgIGxldCBvcmlnVmFsdWUgPSB0eXBlVXNlckF0dHJbYXR0cmlidXRlXS52YWx1ZTtcbiAgICAgICAgdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0udmFsdWUgPSB2YWx1ZXNbYXR0cmlidXRlXSB8fCB0eXBlVXNlckF0dHJbYXR0cmlidXRlXS52YWx1ZSB8fCAnJztcblxuICAgICAgICBpZiAodHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0ubGFiZWwpIHtcbiAgICAgICAgICBpMThuW2F0dHJpYnV0ZV0gPSB0eXBlVXNlckF0dHJbYXR0cmlidXRlXS5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlVXNlckF0dHJbYXR0cmlidXRlXS5vcHRpb25zKSB7XG4gICAgICAgICAgYWR2RmllbGQucHVzaChzZWxlY3RVc2VyQXR0cnMoYXR0cmlidXRlLCB0eXBlVXNlckF0dHJbYXR0cmlidXRlXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkdkZpZWxkLnB1c2goaW5wdXRVc2VyQXR0cnMoYXR0cmlidXRlLCB0eXBlVXNlckF0dHJbYXR0cmlidXRlXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaTE4blthdHRyaWJ1dGVdID0gb3JpZztcbiAgICAgICAgdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0udmFsdWUgPSBvcmlnVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkdkZpZWxkLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRleHQgaW5wdXQgdmFsdWUgZm9yIGF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhdHRycyBhbHNvIGtub3duIGFzIHZhbHVlc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgIGlucHV0IG1hcmt1cFxuICAgKi9cbiAgZnVuY3Rpb24gaW5wdXRVc2VyQXR0cnMobmFtZSwgYXR0cnMpIHtcbiAgICBsZXQgdGV4dEF0dHJzID0ge1xuICAgICAgICBpZDogbmFtZSArICctJyArIGRhdGEubGFzdElELFxuICAgICAgICB0aXRsZTogYXR0cnMuZGVzY3JpcHRpb24gfHwgYXR0cnMubGFiZWwgfHwgbmFtZS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB0eXBlOiBhdHRycy50eXBlIHx8ICd0ZXh0JyxcbiAgICAgICAgY2xhc3NOYW1lOiBbYGZsZC0ke25hbWV9YF1cbiAgICAgIH07XG4gICAgbGV0IGxhYmVsID0gYDxsYWJlbCBmb3I9XCIke3RleHRBdHRycy5pZH1cIj4ke2kxOG5bbmFtZV19PC9sYWJlbD5gO1xuXG4gICAgaWYgKCF1dGlscy5pbkFycmF5KHRleHRBdHRycy50eXBlLCBbJ2NoZWNrYm94JywgJ2NoZWNrYm94LWdyb3VwJywgJ3JhZGlvLWdyb3VwJ10pKSB7XG4gICAgICB0ZXh0QXR0cnMuY2xhc3NOYW1lLnB1c2goJ2Zvcm0tY29udHJvbCcpO1xuICAgIH1cblxuICAgIHRleHRBdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIGF0dHJzLCB0ZXh0QXR0cnMpO1xuICAgIGxldCB0ZXh0SW5wdXQgPSBgPGlucHV0ICR7dXRpbHMuYXR0clN0cmluZyh0ZXh0QXR0cnMpfT5gO1xuICAgIGxldCBpbnB1dFdyYXAgPSBgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj4ke3RleHRJbnB1dH08L2Rpdj5gO1xuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgJHtuYW1lfS13cmFwXCI+JHtsYWJlbH0ke2lucHV0V3JhcH08L2Rpdj5gO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBpbnB1dCBmb3IgbXVsdGlwbGUgY2hvaWNlIHVzZXIgYXR0cmlidXRlc1xuICAgKiBAdG9kbyAgcmVwbGFjZSB3aXRoIHNlbGVjdEF0dHJcbiAgICogQHBhcmFtICB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICAgc2VsZWN0IG1hcmt1cFxuICAgKi9cbiAgZnVuY3Rpb24gc2VsZWN0VXNlckF0dHJzKG5hbWUsIG9wdGlvbnMpIHtcbiAgICBsZXQgb3B0aXMgPSBPYmplY3Qua2V5cyhvcHRpb25zLm9wdGlvbnMpLm1hcCh2YWwgPT4ge1xuICAgICAgbGV0IGF0dHJzID0ge3ZhbHVlOiB2YWx9O1xuICAgICAgaWYgKHZhbCA9PT0gb3B0aW9ucy52YWx1ZSkge1xuICAgICAgICBhdHRycy5zZWxlY3RlZCA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gYDxvcHRpb24gJHt1dGlscy5hdHRyU3RyaW5nKGF0dHJzKX0+JHtvcHRpb25zLm9wdGlvbnNbdmFsXX08L29wdGlvbj5gO1xuICAgIH0pO1xuICAgIGxldCBzZWxlY3RBdHRycyA9IHtcbiAgICAgIGlkOiBuYW1lICsgJy0nICsgZGF0YS5sYXN0SUQsXG4gICAgICB0aXRsZTogb3B0aW9ucy5kZXNjcmlwdGlvbiB8fCBvcHRpb25zLmxhYmVsIHx8IG5hbWUudG9VcHBlckNhc2UoKSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBjbGFzc05hbWU6IGBmbGQtJHtuYW1lfSBmb3JtLWNvbnRyb2xgXG4gICAgfTtcbiAgICBsZXQgbGFiZWwgPSBgPGxhYmVsIGZvcj1cIiR7c2VsZWN0QXR0cnMuaWR9XCI+JHtpMThuW25hbWVdfTwvbGFiZWw+YDtcblxuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZpbHRlcihwcm9wID0+IHtcbiAgICAgIHJldHVybiAhdXRpbHMuaW5BcnJheShwcm9wLCBbJ3ZhbHVlJywgJ29wdGlvbnMnLCAnbGFiZWwnXSk7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbihhdHRyKSB7XG4gICAgICBzZWxlY3RBdHRyc1thdHRyXSA9IG9wdGlvbnNbYXR0cl07XG4gICAgfSk7XG5cbiAgICBsZXQgc2VsZWN0ID0gYDxzZWxlY3QgJHt1dGlscy5hdHRyU3RyaW5nKHNlbGVjdEF0dHJzKX0+JHtvcHRpcy5qb2luKCcnKX08L3NlbGVjdD5gO1xuICAgIGxldCBpbnB1dFdyYXAgPSBgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj4ke3NlbGVjdH08L2Rpdj5gO1xuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgJHtuYW1lfS13cmFwXCI+JHtsYWJlbH0ke2lucHV0V3JhcH08L2Rpdj5gO1xuICB9XG5cbiAgbGV0IGJvb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZXMsIGxhYmVscykge1xuICAgIGlmIChvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdICYmIG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV1bbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbGFiZWwgPSAodHh0KSA9PiB7XG4gICAgICByZXR1cm4gYDxsYWJlbCBmb3I9XCIke25hbWV9LSR7ZGF0YS5sYXN0SUR9XCI+JHt0eHR9PC9sYWJlbD5gO1xuICAgIH07XG4gICAgbGV0IGNoZWNrZWQgPSAodmFsdWVzW25hbWVdICE9PSB1bmRlZmluZWQgPyAnY2hlY2tlZCcgOiAnJyk7XG4gICAgbGV0IGlucHV0ID0gYDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZsZC0ke25hbWV9XCIgbmFtZT1cIiR7bmFtZX1cIiB2YWx1ZT1cInRydWVcIiAke2NoZWNrZWR9IGlkPVwiJHtuYW1lfS0ke2RhdGEubGFzdElEfVwiLz4gYDtcbiAgICBsZXQgbGVmdCA9IFtdO1xuICAgIGxldCByaWdodCA9IFtcbiAgICAgIGlucHV0XG4gICAgXTtcblxuICAgIGlmIChsYWJlbHMuZmlyc3QpIHtcbiAgICAgIGxlZnQudW5zaGlmdChsYWJlbChsYWJlbHMuZmlyc3QpKTtcbiAgICB9XG5cbiAgICBpZiAobGFiZWxzLnNlY29uZCkge1xuICAgICAgcmlnaHQucHVzaChsYWJlbChsYWJlbHMuc2Vjb25kKSk7XG4gICAgfVxuXG4gICAgaWYgKGxhYmVscy5jb250ZW50KSB7XG4gICAgICByaWdodC5wdXNoKGxhYmVscy5jb250ZW50KTtcbiAgICB9XG5cbiAgICByaWdodC51bnNoaWZ0KCc8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcFwiPicpO1xuICAgIHJpZ2h0LnB1c2goJzwvZGl2PicpO1xuXG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCAke25hbWV9LXdyYXBcIj4ke2xlZnQuY29uY2F0KHJpZ2h0KS5qb2luKCcnKX08L2Rpdj5gO1xuICB9O1xuXG4gIGxldCBidG5TdHlsZXMgPSBmdW5jdGlvbihzdHlsZSkge1xuICAgICAgbGV0IHN0eWxlcyA9IGkxOG4uc3R5bGVzLmJ0bjtcbiAgICAgIGxldCBzdHlsZUZpZWxkID0gJyc7XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBsZXQgc3R5bGVMYWJlbCA9IGA8bGFiZWw+JHtpMThuLnN0eWxlfTwvbGFiZWw+YDtcbiAgICAgIHN0eWxlRmllbGQgKz0gYDxpbnB1dCB2YWx1ZT1cIiR7c3R5bGV9XCIgbmFtZT1cInN0eWxlXCIgdHlwZT1cImhpZGRlblwiIGNsYXNzPVwiYnRuLXN0eWxlXCI+YDtcbiAgICAgIHN0eWxlRmllbGQgKz0gJzxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIj4nO1xuXG4gICAgICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGxldCBjbGFzc0xpc3QgPSBbJ2J0bi14cycsICdidG4nLCBgYnRuLSR7ZWxlbWVudH1gXTtcbiAgICAgICAgaWYgKHN0eWxlID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgY2xhc3NMaXN0LnB1c2goJ3NlbGVjdGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZUZpZWxkICs9IGA8YnV0dG9uIHZhbHVlPVwiJHtlbGVtZW50fVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIiR7Y2xhc3NMaXN0LmpvaW4oJyAnKX1cIj4ke2kxOG4uc3R5bGVzLmJ0bltlbGVtZW50XX08L2J1dHRvbj5gO1xuICAgICAgfSk7XG5cbiAgICAgIHN0eWxlRmllbGQgKz0gJzwvZGl2Pic7XG5cbiAgICAgIHN0eWxlRmllbGQgPSBgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgc3R5bGUtd3JhcFwiPiR7c3R5bGVMYWJlbH0gJHtzdHlsZUZpZWxkfTwvZGl2PmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlRmllbGQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIG51bWJlciBhdHRyaWJ1dGUgdG8gYSBmaWVsZC5cbiAgICogQHBhcmFtICB7U3RyaW5nfSBhdHRyaWJ1dGVcbiAgICogQHBhcmFtICB7T2JqZWN0fSB2YWx1ZXNcbiAgICogQHJldHVybiB7U3RyaW5nfSBtYXJrdXAgZm9yIG51bWJlciBhdHRyaWJ1dGVcbiAgICovXG4gIGxldCBudW1iZXJBdHRyaWJ1dGUgPSBmdW5jdGlvbihhdHRyaWJ1dGUsIHZhbHVlcykge1xuICAgIGlmIChvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdICYmIG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV1bYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBhdHRyVmFsID0gdmFsdWVzW2F0dHJpYnV0ZV07XG4gICAgbGV0IGF0dHJMYWJlbCA9IGkxOG5bYXR0cmlidXRlXSB8fCBhdHRyaWJ1dGU7XG4gICAgbGV0IHBsYWNlaG9sZGVyID0gaTE4bltgcGxhY2Vob2xkZXIuJHthdHRyaWJ1dGV9YF07XG4gICAgbGV0IGlucHV0Q29uZmlnID0ge1xuICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICB2YWx1ZTogYXR0clZhbCxcbiAgICAgIG5hbWU6IGF0dHJpYnV0ZSxcbiAgICAgIG1pbjogJzAnLFxuICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgY2xhc3NOYW1lOiBgZmxkLSR7YXR0cmlidXRlfSBmb3JtLWNvbnRyb2xgLFxuICAgICAgaWQ6IGAke2F0dHJpYnV0ZX0tJHtkYXRhLmxhc3RJRH1gXG4gICAgfTtcbiAgICBsZXQgbnVtYmVyQXR0cmlidXRlID0gYDxpbnB1dCAke3V0aWxzLmF0dHJTdHJpbmcodXRpbHMudHJpbU9iaihpbnB1dENvbmZpZykpfT5gO1xuICAgIGxldCBpbnB1dFdyYXAgPSBgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj4ke251bWJlckF0dHJpYnV0ZX08L2Rpdj5gO1xuXG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCAke2F0dHJpYnV0ZX0td3JhcFwiPjxsYWJlbCBmb3I9XCIke2lucHV0Q29uZmlnLmlkfVwiPiR7YXR0ckxhYmVsfTwvbGFiZWw+ICR7aW5wdXRXcmFwfTwvZGl2PmA7XG4gIH07XG5cbiAgLyoqXG4gICAqIHNlbGVjdEF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGF0dHJpYnV0ZSAgYXR0cmlidXRlIG5hbWVcbiAgICogQHBhcmFtICB7T2JqZWN0fSB2YWx1ZXMgICAgIGFrYSBhdHRyc1xuICAgKiBAcGFyYW0gIHtBcnJheX0gb3B0aW9uRGF0YSAgc2VsZWN0IGZpZWxkIG9wdGlvbiBkYXRhXG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgICAgICBzZWxlY3QgaW5wdXQgbWFrcnVwXG4gICAqL1xuICBsZXQgc2VsZWN0QXR0cmlidXRlID0gZnVuY3Rpb24oYXR0cmlidXRlLCB2YWx1ZXMsIG9wdGlvbkRhdGEpIHtcbiAgICBpZiAob3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXSAmJiBvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdW2F0dHJpYnV0ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHNlbGVjdE9wdGlvbnMgPSBvcHRpb25EYXRhLm1hcCgob3B0aW9uLCBpKSA9PiB7XG4gICAgICBsZXQgb3B0aW9uQXR0cnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbGFiZWw6IGAke2kxOG4ub3B0aW9ufSAke2l9YCxcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgfSwgb3B0aW9uKTtcbiAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlc1thdHRyaWJ1dGVdKSB7XG4gICAgICAgIG9wdGlvbkF0dHJzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgPG9wdGlvbiAke3V0aWxzLmF0dHJTdHJpbmcodXRpbHMudHJpbU9iaihvcHRpb25BdHRycykpfT4ke29wdGlvbkF0dHJzLmxhYmVsfTwvb3B0aW9uPmA7XG4gICAgfSk7XG4gICAgbGV0IHNlbGVjdEF0dHJzID0ge1xuICAgICAgICBpZDogYXR0cmlidXRlICsgJy0nICsgZGF0YS5sYXN0SUQsXG4gICAgICAgIG5hbWU6IGF0dHJpYnV0ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBgZmxkLSR7YXR0cmlidXRlfSBmb3JtLWNvbnRyb2xgXG4gICAgICB9O1xuICAgIGxldCBsYWJlbCA9IGA8bGFiZWwgZm9yPVwiJHtzZWxlY3RBdHRycy5pZH1cIj4ke2kxOG5bYXR0cmlidXRlXSB8fCB1dGlscy5jYXBpdGFsaXplKGF0dHJpYnV0ZSl9PC9sYWJlbD5gO1xuICAgIGxldCBzZWxlY3QgPSBgPHNlbGVjdCAke3V0aWxzLmF0dHJTdHJpbmcoc2VsZWN0QXR0cnMpfT4ke3NlbGVjdE9wdGlvbnMuam9pbignJyl9PC9zZWxlY3Q+YDtcbiAgICBsZXQgaW5wdXRXcmFwID0gYDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+JHtzZWxlY3R9PC9kaXY+YDtcblxuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgJHtzZWxlY3RBdHRycy5uYW1lfS13cmFwXCI+JHtsYWJlbH0ke2lucHV0V3JhcH08L2Rpdj5gO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzb21lIHRleHQgaW5wdXRzIGZvciBmaWVsZCBhdHRyaWJ1dGVzLCAqKndpbGwgYmUgcmVwbGFjZWQqKlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqL1xuICBsZXQgdGV4dEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dHJpYnV0ZSwgdmFsdWVzKSB7XG4gICAgaWYgKG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV0gJiYgb3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXVthdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBsYWNlaG9sZGVyRmllbGRzID0gW1xuICAgICAgJ3RleHQnLFxuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICdzZWxlY3QnLFxuICAgICAgJ2F1dG9jb21wbGV0ZSdcbiAgICBdO1xuXG4gICAgbGV0IG5vTmFtZSA9IFtcbiAgICAgICdoZWFkZXInLFxuICAgICAgJ3BhcmFncmFwaCdcbiAgICBdO1xuXG4gICAgbGV0IHRleHRBcmVhID0gWydwYXJhZ3JhcGgnXTtcblxuICAgIGxldCBhdHRyVmFsID0gdmFsdWVzW2F0dHJpYnV0ZV0gfHwgJyc7XG4gICAgbGV0IGF0dHJMYWJlbCA9IGkxOG5bYXR0cmlidXRlXTtcblxuICAgIGlmIChhdHRyaWJ1dGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIGlmICh1dGlscy5pbkFycmF5KHZhbHVlcy50eXBlLCB0ZXh0QXJlYSkpIHtcbiAgICAgICAgYXR0ckxhYmVsID0gaTE4bi5jb250ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0clZhbCA9IHV0aWxzLnBhcnNlZEh0bWwodmFsdWVzW2F0dHJpYnV0ZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdWJ0eXBlcy5oZWFkZXIpIHtcbiAgICAgIG5vTmFtZSA9IG5vTmFtZS5jb25jYXQoc3VidHlwZXMuaGVhZGVyKTtcbiAgICB9XG5cbiAgICBsZXQgcGxhY2Vob2xkZXIgPSBpMThuW2BwbGFjZWhvbGRlci4ke2F0dHJpYnV0ZX1gXSB8fCAnJztcbiAgICBsZXQgYXR0cmlidXRlZmllbGQgPSAnJztcbiAgICBsZXQgbm9NYWtlQXR0ciA9IFtdO1xuXG4gICAgLy8gRmllbGQgaGFzIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZVxuICAgIGlmIChhdHRyaWJ1dGUgPT09ICdwbGFjZWhvbGRlcicgJiYgIXV0aWxzLmluQXJyYXkodmFsdWVzLnR5cGUsIHBsYWNlaG9sZGVyRmllbGRzKSkge1xuICAgICAgbm9NYWtlQXR0ci5wdXNoKHRydWUpO1xuICAgIH1cblxuICAgIC8vIEZpZWxkIGhhcyBuYW1lIGF0dHJpYnV0ZVxuICAgIGlmIChhdHRyaWJ1dGUgPT09ICduYW1lJyAmJiB1dGlscy5pbkFycmF5KHZhbHVlcy50eXBlLCBub05hbWUpKSB7XG4gICAgICBub01ha2VBdHRyLnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCFub01ha2VBdHRyLnNvbWUoZWxlbSA9PiBlbGVtID09PSB0cnVlKSkge1xuICAgICAgbGV0IGlucHV0Q29uZmlnID0ge1xuICAgICAgICBuYW1lOiBhdHRyaWJ1dGUsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgICAgY2xhc3NOYW1lOiBgZmxkLSR7YXR0cmlidXRlfSBmb3JtLWNvbnRyb2xgLFxuICAgICAgICBpZDogYCR7YXR0cmlidXRlfS0ke2RhdGEubGFzdElEfWBcbiAgICAgIH07XG4gICAgICBsZXQgYXR0cmlidXRlTGFiZWwgPSBgPGxhYmVsIGZvcj1cIiR7aW5wdXRDb25maWcuaWR9XCI+JHthdHRyTGFiZWx9PC9sYWJlbD5gO1xuXG4gICAgICBpZiAoYXR0cmlidXRlID09PSAnbGFiZWwnKSB7XG4gICAgICAgIGF0dHJpYnV0ZWZpZWxkICs9IGA8ZGl2IGNvbnRlbnRlZGl0YWJsZSAke3V0aWxzLmF0dHJTdHJpbmcoaW5wdXRDb25maWcpfT4ke2F0dHJWYWx9PC9kaXY+YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0Q29uZmlnLnZhbHVlID0gYXR0clZhbDtcbiAgICAgICAgaW5wdXRDb25maWcudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgYXR0cmlidXRlZmllbGQgKz0gYDxpbnB1dCAke3V0aWxzLmF0dHJTdHJpbmcoaW5wdXRDb25maWcpfT5gO1xuICAgICAgfVxuXG4gICAgICBsZXQgaW5wdXRXcmFwID0gYDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+JHthdHRyaWJ1dGVmaWVsZH08L2Rpdj5gO1xuXG4gICAgICBsZXQgdmlzaWJpbGl0eSA9ICdibG9jayc7XG4gICAgICBpZiAoYXR0cmlidXRlID09PSAndmFsdWUnKSB7XG4gICAgICAgIHZpc2liaWxpdHkgPSB2YWx1ZXMuc3VidHlwZSAmJiB2YWx1ZXMuc3VidHlwZSA9PT0gJ3F1aWxsJyAmJiAnbm9uZSc7XG4gICAgICB9XG5cbiAgICAgIGF0dHJpYnV0ZWZpZWxkID0gYDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICR7YXR0cmlidXRlfS13cmFwXCIgc3R5bGU9XCJkaXNwbGF5OiAke3Zpc2liaWxpdHl9XCI+JHthdHRyaWJ1dGVMYWJlbH0gJHtpbnB1dFdyYXB9PC9kaXY+YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlZmllbGQ7XG4gIH07XG5cbiAgbGV0IHJlcXVpcmVkRmllbGQgPSBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICBsZXQgbm9SZXF1aXJlID0gW1xuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ3BhcmFncmFwaCcsXG4gICAgICAgICdidXR0b24nXG4gICAgICBdO1xuICAgIGxldCBub01ha2UgPSBbXTtcbiAgICBsZXQgcmVxdWlyZUZpZWxkID0gJyc7XG5cbiAgICBpZiAodXRpbHMuaW5BcnJheSh2YWx1ZXMudHlwZSwgbm9SZXF1aXJlKSkge1xuICAgICAgbm9NYWtlLnB1c2godHJ1ZSk7XG4gICAgfVxuICAgIGlmICghbm9NYWtlLnNvbWUoZWxlbSA9PiBlbGVtID09PSB0cnVlKSkge1xuICAgICAgcmVxdWlyZUZpZWxkID0gYm9vbEF0dHJpYnV0ZSgncmVxdWlyZWQnLCB2YWx1ZXMsIHtmaXJzdDogaTE4bi5yZXF1aXJlZH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1aXJlRmllbGQ7XG4gIH07XG5cbiAgLy8gQXBwZW5kIHRoZSBuZXcgZmllbGQgdG8gdGhlIGVkaXRvclxuICBsZXQgYXBwZW5kTmV3RmllbGQgPSBmdW5jdGlvbih2YWx1ZXMsIGlzTmV3ID0gdHJ1ZSkge1xuICAgIGxldCB0eXBlID0gdmFsdWVzLnR5cGUgfHwgJ3RleHQnO1xuICAgIGxldCBsYWJlbCA9IHZhbHVlcy5sYWJlbCB8fCBpMThuW3R5cGVdIHx8IGkxOG4ubGFiZWw7XG4gICAgbGV0IGRlbEJ0biA9IG0oJ2EnLCBpMThuLnJlbW92ZSwge1xuICAgICAgICBpZDogJ2RlbF8nICsgZGF0YS5sYXN0SUQsXG4gICAgICAgIGNsYXNzTmFtZTogJ2RlbC1idXR0b24gYnRuIGRlbGV0ZS1jb25maXJtJyxcbiAgICAgICAgdGl0bGU6IGkxOG4ucmVtb3ZlTWVzc2FnZVxuICAgICAgfSk7XG4gICAgbGV0IHRvZ2dsZUJ0biA9IG0oJ2EnLCBudWxsLCB7XG4gICAgICBpZDogZGF0YS5sYXN0SUQgKyAnLWVkaXQnLFxuICAgICAgY2xhc3NOYW1lOiAndG9nZ2xlLWZvcm0gYnRuIGljb24tcGVuY2lsJyxcbiAgICAgIHRpdGxlOiBpMThuLmhpZGVcbiAgICB9KTtcbiAgICBsZXQgY29weUJ0biA9IG0oJ2EnLCBudWxsLCB7XG4gICAgICBpZDogZGF0YS5sYXN0SUQgKyAnLWNvcHknLFxuICAgICAgY2xhc3NOYW1lOiAnY29weS1idXR0b24gYnRuIGljb24tY29weScsXG4gICAgICB0aXRsZTogaTE4bi5jb3B5QnV0dG9uVG9vbHRpcFxuICAgIH0pO1xuXG4gICAgbGV0IGxpQ29udGVudHMgPSBtKFxuICAgICAgJ2RpdicsIFt0b2dnbGVCdG4sIGNvcHlCdG4sIGRlbEJ0bl0sIHtjbGFzc05hbWU6ICdmaWVsZC1hY3Rpb25zJ31cbiAgICApLm91dGVySFRNTDtcblxuICAgIGxpQ29udGVudHMgKz0gYDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+JHt1dGlscy5wYXJzZWRIdG1sKGxhYmVsKX08L2xhYmVsPmA7XG4gICAgbGV0IHJlcXVpcmVkRGlzcGxheSA9IHZhbHVlcy5yZXF1aXJlZCA/ICdzdHlsZT1cImRpc3BsYXk6aW5saW5lXCInIDogJyc7XG4gICAgbGlDb250ZW50cyArPSBgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZC1hc3Rlcmlza1wiICR7cmVxdWlyZWREaXNwbGF5fT4gKjwvc3Bhbj5gO1xuXG4gICAgbGV0IGRlc2NBdHRycyA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ3Rvb2x0aXAtZWxlbWVudCcsXG4gICAgICB0b29sdGlwOiB2YWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICBzdHlsZTogdmFsdWVzLmRlc2NyaXB0aW9uID8gJ2Rpc3BsYXk6aW5saW5lLWJsb2NrJyA6ICdkaXNwbGF5Om5vbmUnXG4gICAgfTtcbiAgICBsaUNvbnRlbnRzICs9IGA8c3BhbiAke3V0aWxzLmF0dHJTdHJpbmcoZGVzY0F0dHJzKX0+Pzwvc3Bhbj5gO1xuXG4gICAgbGlDb250ZW50cyArPSBtKCdkaXYnLCAnJywge2NsYXNzTmFtZTogJ3ByZXYtaG9sZGVyJ30pLm91dGVySFRNTDtcbiAgICBsaUNvbnRlbnRzICs9IGA8ZGl2IGlkPVwiJHtkYXRhLmxhc3RJRH0taG9sZGVyXCIgY2xhc3M9XCJmcm0taG9sZGVyXCI+YDtcbiAgICBsaUNvbnRlbnRzICs9ICc8ZGl2IGNsYXNzPVwiZm9ybS1lbGVtZW50c1wiPic7XG5cbiAgICBsaUNvbnRlbnRzICs9IGFkdkZpZWxkcyh2YWx1ZXMpO1xuICAgIGxpQ29udGVudHMgKz0gbSgnYScsIGkxOG4uY2xvc2UsIHtjbGFzc05hbWU6ICdjbG9zZS1maWVsZCd9KS5vdXRlckhUTUw7XG5cbiAgICBsaUNvbnRlbnRzICs9ICc8L2Rpdj4nO1xuICAgIGxpQ29udGVudHMgKz0gJzwvZGl2Pic7XG5cbiAgICBsZXQgZmllbGQgPSBtKCdsaScsIGxpQ29udGVudHMsIHtcbiAgICAgICAgJ2NsYXNzJzogdHlwZSArICctZmllbGQgZm9ybS1maWVsZCcsXG4gICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgaWQ6IGRhdGEubGFzdElEXG4gICAgICB9KTtcbiAgICBsZXQgJGxpID0gJChmaWVsZCk7XG5cbiAgICAkbGkuZGF0YSgnZmllbGREYXRhJywge2F0dHJzOiB2YWx1ZXN9KTtcblxuICAgIGlmICh0eXBlb2YgaGVscGVycy5zdG9wSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAkKCc+IGxpJywgZC5zdGFnZSkuZXEoaGVscGVycy5zdG9wSW5kZXgpLmJlZm9yZSgkbGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkc3RhZ2UuYXBwZW5kKCRsaSk7XG4gICAgfVxuXG4gICAgJCgnLnNvcnRhYmxlLW9wdGlvbnMnLCAkbGkpXG4gICAgLnNvcnRhYmxlKHt1cGRhdGU6ICgpID0+IGhlbHBlcnMudXBkYXRlUHJldmlldygkbGkpfSk7XG5cbiAgICBoZWxwZXJzLnVwZGF0ZVByZXZpZXcoJGxpKTtcblxuICAgIGlmIChvcHRzLnR5cGVVc2VyRXZlbnRzW3R5cGVdICYmIG9wdHMudHlwZVVzZXJFdmVudHNbdHlwZV0ub25hZGQpIHtcbiAgICAgIG9wdHMudHlwZVVzZXJFdmVudHNbdHlwZV0ub25hZGQoZmllbGQpO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmVkaXRPbkFkZCAmJiBpc05ldykge1xuICAgICAgaGVscGVycy5jbG9zZUFsbEVkaXQoKTtcbiAgICAgIGhlbHBlcnMudG9nZ2xlRWRpdChkYXRhLmxhc3RJRCwgZmFsc2UpO1xuICAgICAgLy8gZmllbGQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB9XG5cbiAgICBkYXRhLmxhc3RJRCA9IGhlbHBlcnMuaW5jcmVtZW50SWQoZGF0YS5sYXN0SUQpO1xuICB9O1xuXG4gIC8vIFNlbGVjdCBmaWVsZCBodG1sLCBzaW5jZSB0aGVyZSBtYXkgYmUgbXVsdGlwbGVcbiAgbGV0IHNlbGVjdEZpZWxkT3B0aW9ucyA9IGZ1bmN0aW9uKG5hbWUsIG9wdGlvbkRhdGEsIG11bHRpcGxlU2VsZWN0KSB7XG4gICAgbGV0IG9wdGlvbklucHV0VHlwZSA9IHtcbiAgICAgICAgc2VsZWN0ZWQ6IChtdWx0aXBsZVNlbGVjdCA/ICdjaGVja2JveCcgOiAncmFkaW8nKVxuICAgICAgfTtcbiAgICBsZXQgb3B0aW9uRGF0YU9yZGVyID0gW1xuICAgICAgJ3ZhbHVlJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAnc2VsZWN0ZWQnXG4gICAgXTtcbiAgICBsZXQgb3B0aW9uSW5wdXRzID0gW107XG4gICAgbGV0IG9wdGlvblRlbXBsYXRlID0ge3NlbGVjdGVkOiBmYWxzZSwgbGFiZWw6ICcnLCB2YWx1ZTogJyd9O1xuXG4gICAgb3B0aW9uRGF0YSA9IE9iamVjdC5hc3NpZ24ob3B0aW9uVGVtcGxhdGUsIG9wdGlvbkRhdGEpO1xuXG4gICAgZm9yIChsZXQgaSA9IG9wdGlvbkRhdGFPcmRlci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHByb3AgPSBvcHRpb25EYXRhT3JkZXJbaV07XG4gICAgICBpZiAob3B0aW9uRGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICBsZXQgYXR0cnMgPSB7XG4gICAgICAgICAgdHlwZTogb3B0aW9uSW5wdXRUeXBlW3Byb3BdIHx8ICd0ZXh0JyxcbiAgICAgICAgICBjbGFzc05hbWU6ICdvcHRpb24tJyArIHByb3AsXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbkRhdGFbcHJvcF0sXG4gICAgICAgICAgbmFtZTogbmFtZSArICctb3B0aW9uJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGF0dHJzLnBsYWNlaG9sZGVyID0gaTE4bltgcGxhY2Vob2xkZXIuJHtwcm9wfWBdIHx8ICcnO1xuXG4gICAgICAgIGlmIChwcm9wID09PSAnc2VsZWN0ZWQnICYmIG9wdGlvbkRhdGEuc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICBhdHRycy5jaGVja2VkID0gb3B0aW9uRGF0YS5zZWxlY3RlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbklucHV0cy5wdXNoKG0oJ2lucHV0JywgbnVsbCwgYXR0cnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVtb3ZlQXR0cnMgPSB7XG4gICAgICBjbGFzc05hbWU6ICdyZW1vdmUgYnRuJyxcbiAgICAgIHRpdGxlOiBpMThuLnJlbW92ZU1lc3NhZ2VcbiAgICB9O1xuICAgIG9wdGlvbklucHV0cy5wdXNoKHV0aWxzLm1hcmt1cCgnYScsIGkxOG4ucmVtb3ZlLCByZW1vdmVBdHRycykpO1xuXG4gICAgbGV0IGZpZWxkID0gdXRpbHMubWFya3VwKCdsaScsIG9wdGlvbklucHV0cyk7XG5cbiAgICByZXR1cm4gZmllbGQub3V0ZXJIVE1MO1xuICB9O1xuXG4gIGxldCBjbG9uZUl0ZW0gPSBmdW5jdGlvbiBjbG9uZUl0ZW0oY3VycmVudEl0ZW0pIHtcbiAgICBsZXQgY3VycmVudElkID0gY3VycmVudEl0ZW0uYXR0cignaWQnKTtcbiAgICBsZXQgdHlwZSA9IGN1cnJlbnRJdGVtLmF0dHIoJ3R5cGUnKTtcbiAgICBsZXQgdHMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBsZXQgY2xvbmVOYW1lID0gdHlwZSArICctJyArIHRzO1xuICAgIGxldCAkY2xvbmUgPSBjdXJyZW50SXRlbS5jbG9uZSgpO1xuXG4gICAgJGNsb25lLmZpbmQoJ1tpZF0nKS5lYWNoKChpLCBlbGVtKSA9PiB7XG4gICAgIGVsZW0uaWQgPSBlbGVtLmlkLnJlcGxhY2UoY3VycmVudElkLCBkYXRhLmxhc3RJRCk7XG4gICAgfSk7XG5cbiAgICAkY2xvbmUuZmluZCgnW2Zvcl0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZm9yJywgdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpLnJlcGxhY2UoY3VycmVudElkLCBkYXRhLmxhc3RJRCkpO1xuICAgIH0pO1xuXG4gICAgJGNsb25lLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAkKCdlOm5vdCguZm9ybS1lbGVtZW50cyknKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICBsZXQgbmV3TmFtZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gICAgICAgIG5ld05hbWUgPSBuZXdOYW1lLnN1YnN0cmluZygwLCAobmV3TmFtZS5sYXN0SW5kZXhPZignLScpICsgMSkpO1xuICAgICAgICBuZXdOYW1lID0gbmV3TmFtZSArIHRzLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCduYW1lJywgbmV3TmFtZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICRjbG9uZS5maW5kKCcuZm9ybS1lbGVtZW50cycpLmZpbmQoJzppbnB1dCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoJ25hbWUnKSA9PT0gJ25hbWUnKSB7XG4gICAgICAgIGxldCBuZXdWYWwgPSB0aGlzLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgICAgbmV3VmFsID0gbmV3VmFsLnN1YnN0cmluZygwLCAobmV3VmFsLmxhc3RJbmRleE9mKCctJykgKyAxKSk7XG4gICAgICAgIG5ld1ZhbCA9IG5ld1ZhbCArIHRzLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCd2YWx1ZScsIG5ld1ZhbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkY2xvbmUuYXR0cignaWQnLCBkYXRhLmxhc3RJRCk7XG4gICAgJGNsb25lLmF0dHIoJ25hbWUnLCBjbG9uZU5hbWUpO1xuICAgICRjbG9uZS5hZGRDbGFzcygnY2xvbmVkJyk7XG4gICAgJCgnLnNvcnRhYmxlLW9wdGlvbnMnLCAkY2xvbmUpLnNvcnRhYmxlKCk7XG5cbiAgICBpZiAob3B0cy50eXBlVXNlckV2ZW50c1t0eXBlXSAmJiBvcHRzLnR5cGVVc2VyRXZlbnRzW3R5cGVdLm9uY2xvbmUpIHtcbiAgICAgIG9wdHMudHlwZVVzZXJFdmVudHNbdHlwZV0ub25jbG9uZSgkY2xvbmVbMF0pO1xuICAgIH1cblxuICAgIGRhdGEubGFzdElEID0gaGVscGVycy5pbmNyZW1lbnRJZChkYXRhLmxhc3RJRCk7XG4gICAgcmV0dXJuICRjbG9uZTtcbiAgfTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVUSUxJVElFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbiAgLy8gZGVsZXRlIG9wdGlvbnNcbiAgJHN0YWdlLm9uKCdjbGljayB0b3VjaHN0YXJ0JywgJy5yZW1vdmUnLCBmdW5jdGlvbihlKSB7XG4gICAgbGV0ICRmaWVsZCA9ICQodGhpcykucGFyZW50cygnLmZvcm0tZmllbGQ6ZXEoMCknKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IG9wdGlvbnNDb3VudCA9ICQodGhpcykucGFyZW50cygnLnNvcnRhYmxlLW9wdGlvbnM6ZXEoMCknKS5jaGlsZHJlbignbGknKS5sZW5ndGg7XG4gICAgaWYgKG9wdGlvbnNDb3VudCA8PSAyKSB7XG4gICAgICBvcHRzLm5vdGlmeS5lcnJvcignRXJyb3I6ICcgKyBpMThuLm1pbk9wdGlvbk1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKHRoaXMpLnBhcmVudCgnbGknKS5zbGlkZVVwKCcyNTAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTtcbiAgICAgICAgaGVscGVycy51cGRhdGVQcmV2aWV3KCRmaWVsZCk7XG4gICAgICAgIGhlbHBlcnMuc2F2ZS5jYWxsKGhlbHBlcnMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyB0b3VjaCBmb2N1c1xuICAkc3RhZ2Uub24oJ3RvdWNoc3RhcnQnLCAnaW5wdXQnLCBmdW5jdGlvbihlKSB7XG4gICAgbGV0ICRpbnB1dCA9ICQodGhpcyk7XG4gICAgaWYgKGUuaGFuZGxlZCAhPT0gdHJ1ZSkge1xuICAgICAgaWYgKCRpbnB1dC5hdHRyKCd0eXBlJykgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgJGlucHV0LnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgbGV0IGZpZWxkVmFsID0gJGlucHV0LnZhbCgpO1xuICAgICAgICAkaW5wdXQudmFsKGZpZWxkVmFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gdG9nZ2xlIGZpZWxkc1xuICAkc3RhZ2Uub24oJ2NsaWNrIHRvdWNoc3RhcnQnLCAnLnRvZ2dsZS1mb3JtLCAuY2xvc2UtZmllbGQnLCBmdW5jdGlvbihlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGUuaGFuZGxlZCAhPT0gdHJ1ZSkge1xuICAgICAgbGV0IHRhcmdldElEID0gJChlLnRhcmdldCkucGFyZW50cygnLmZvcm0tZmllbGQ6ZXEoMCknKS5hdHRyKCdpZCcpO1xuICAgICAgaGVscGVycy50b2dnbGVFZGl0KHRhcmdldElEKTtcbiAgICAgIGUuaGFuZGxlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gICRzdGFnZS5vbignY2hhbmdlJywgJ1tuYW1lPVwic3VidHlwZVwiXScsIChlKSA9PiB7XG4gICAgY29uc3QgJGZpZWxkID0gJChlLnRhcmdldCkuY2xvc2VzdCgnbGkuZm9ybS1maWVsZCcpO1xuICAgIGNvbnN0ICR2YWxXcmFwID0gJCgnLnZhbHVlLXdyYXAnLCAkZmllbGQpO1xuICAgICR2YWxXcmFwLnRvZ2dsZShlLnRhcmdldC52YWx1ZSAhPT0gJ3F1aWxsJyk7XG4gIH0pO1xuXG5cbiAgJHN0YWdlLm9uKCdjaGFuZ2UnLCAnLnByZXYtaG9sZGVyIGlucHV0LCAucHJldi1ob2xkZXIgc2VsZWN0LCAucHJldi1ob2xkZXIgdGV4dGFyZWEnLCBlID0+IHtcbiAgICBsZXQgcHJldk9wdGlvbnM7XG4gICAgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnb3RoZXItb3B0aW9uJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGZpZWxkID0gdXRpbHMuY2xvc2VzdChlLnRhcmdldCwgJy5mb3JtLWZpZWxkJyk7XG4gICAgaWYgKHV0aWxzLmluQXJyYXkoZmllbGQudHlwZSwgWydzZWxlY3QnLCAnY2hlY2tib3gtZ3JvdXAnLCAncmFkaW8tZ3JvdXAnXSkpIHtcbiAgICAgIGxldCBvcHRpb25zID0gZmllbGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3B0aW9uLXZhbHVlJyk7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgdXRpbHMuZm9yRWFjaChvcHRpb25zLCBpID0+IHtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zW2ldLnBhcmVudEVsZW1lbnQuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbi5jaGVja2VkID0gZS50YXJnZXQudmFsdWUgPT09IG9wdGlvbnNbaV0udmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldk9wdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShlLnRhcmdldC5uYW1lKTtcbiAgICAgICAgdXRpbHMuZm9yRWFjaChwcmV2T3B0aW9ucywgaSA9PiB7XG4gICAgICAgICAgbGV0IHNlbGVjdGVkT3B0aW9uID0gb3B0aW9uc1tpXS5wYXJlbnRFbGVtZW50LmNoaWxkTm9kZXNbMF07XG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb24uY2hlY2tlZCA9IHByZXZPcHRpb25zW2ldLmNoZWNrZWQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZmllbGRWYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmFsdWUtJyArIGZpZWxkLmlkKTtcbiAgICAgIGlmKGZpZWxkVmFsKSB7XG4gICAgICAgIGZpZWxkVmFsLnZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGVscGVycy5zYXZlLmNhbGwoaGVscGVycyk7XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBwcmV2aWV3IHRvIGxhYmVsXG4gIHV0aWxzLmFkZEV2ZW50TGlzdGVuZXJzKGQuc3RhZ2UsICdrZXl1cCBjaGFuZ2UnLCBlID0+IHtcbiAgICBpZiAoIWUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZmxkLWxhYmVsJykpIHJldHVybjtcbiAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC52YWx1ZSB8fCBlLnRhcmdldC5pbm5lckhUTUw7XG4gICAgbGV0IGxhYmVsID0gdXRpbHMuY2xvc2VzdChlLnRhcmdldCwgJy5mb3JtLWZpZWxkJykucXVlcnlTZWxlY3RvcignLmZpZWxkLWxhYmVsJyk7XG4gICAgbGFiZWwuaW5uZXJIVE1MID0gdXRpbHMucGFyc2VkSHRtbCh2YWx1ZSk7XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBlcnJvciBzdHlsaW5nIHdoZW4gdXNlcnMgdHJpZXMgdG8gY29ycmVjdCBtaXN0YWtlXG4gICRzdGFnZS5vbigna2V5dXAnLCAnaW5wdXQuZXJyb3InLCBmdW5jdGlvbihlKSB7XG4gICAgJChlLnRhcmdldCkucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBwcmV2aWV3IGZvciBkZXNjcmlwdGlvblxuICAkc3RhZ2Uub24oJ2tleXVwJywgJ2lucHV0W25hbWU9XCJkZXNjcmlwdGlvblwiXScsIGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgJGZpZWxkID0gJChlLnRhcmdldCkucGFyZW50cygnLmZvcm0tZmllbGQ6ZXEoMCknKTtcbiAgICBsZXQgY2xvc2VzdFRvb2xUaXAgPSAkKCcudG9vbHRpcC1lbGVtZW50JywgJGZpZWxkKTtcbiAgICBsZXQgdHRWYWwgPSAkKGUudGFyZ2V0KS52YWwoKTtcbiAgICBpZiAodHRWYWwgIT09ICcnKSB7XG4gICAgICBpZiAoIWNsb3Nlc3RUb29sVGlwLmxlbmd0aCkge1xuICAgICAgICBsZXQgdHQgPSBgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLWVsZW1lbnRcIiB0b29sdGlwPVwiJHt0dFZhbH1cIj4/PC9zcGFuPmA7XG4gICAgICAgICQoJy5maWVsZC1sYWJlbCcsICRmaWVsZCkuYWZ0ZXIodHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvc2VzdFRvb2xUaXAuYXR0cigndG9vbHRpcCcsIHR0VmFsKS5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjbG9zZXN0VG9vbFRpcC5sZW5ndGgpIHtcbiAgICAgICAgY2xvc2VzdFRvb2xUaXAuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgbXVsdGlwbGUgc2VsZWN0IG9wdGlvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBlIGNsaWNrIGV2ZW50XG4gICAqIEByZXR1cm4ge1N0cmluZ30gbmV3VHlwZVxuICAgKi9cbiAgJHN0YWdlLm9uKCdjaGFuZ2UnLCAnLmZsZC1tdWx0aXBsZScsIGUgPT4ge1xuICAgIGxldCBuZXdUeXBlID0gZS50YXJnZXQuY2hlY2tlZCA/ICdjaGVja2JveCcgOiAncmFkaW8nO1xuICAgIGxldCAkb3B0aW9ucyA9ICQoJy5vcHRpb24tc2VsZWN0ZWQnLCAkKGUudGFyZ2V0KS5jbG9zZXN0KCcuZm9ybS1lbGVtZW50cycpKTtcbiAgICAkb3B0aW9ucy5lYWNoKGkgPT4gJG9wdGlvbnNbaV0udHlwZSA9IG5ld1R5cGUpO1xuICAgIHJldHVybiBuZXdUeXBlO1xuICB9KTtcblxuICAvLyBmb3JtYXQgbmFtZSBhdHRyaWJ1dGVcbiAgJHN0YWdlLm9uKCdibHVyJywgJ2lucHV0LmZsZC1uYW1lJywgZnVuY3Rpb24oZSkge1xuICAgIGUudGFyZ2V0LnZhbHVlID0gdXRpbHMuc2FmZW5hbWUoZS50YXJnZXQudmFsdWUpO1xuICAgIGlmIChlLnRhcmdldC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICQoZS50YXJnZXQpXG4gICAgICAuYWRkQ2xhc3MoJ2ZpZWxkLWVycm9yJylcbiAgICAgIC5hdHRyKCdwbGFjZWhvbGRlcicsIGkxOG4uY2Fubm90QmVFbXB0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQoZS50YXJnZXQpLnJlbW92ZUNsYXNzKCdmaWVsZC1lcnJvcicpO1xuICAgIH1cbiAgfSk7XG5cbiAgJHN0YWdlLm9uKCdibHVyJywgJ2lucHV0LmZsZC1tYXhsZW5ndGgnLCBlID0+IHtcbiAgICBlLnRhcmdldC52YWx1ZSA9IHV0aWxzLmZvcmNlTnVtYmVyKGUudGFyZ2V0LnZhbHVlKTtcbiAgfSk7XG5cbiAgLy8gQ29weSBmaWVsZFxuICAkc3RhZ2Uub24oJ2NsaWNrIHRvdWNoc3RhcnQnLCAnLmljb24tY29weScsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IGN1cnJlbnRJdGVtID0gJChlLnRhcmdldCkucGFyZW50KCkucGFyZW50KCdsaScpO1xuICAgIGxldCAkY2xvbmUgPSBjbG9uZUl0ZW0oY3VycmVudEl0ZW0pO1xuICAgICRjbG9uZS5pbnNlcnRBZnRlcihjdXJyZW50SXRlbSk7XG4gICAgaGVscGVycy51cGRhdGVQcmV2aWV3KCRjbG9uZSk7XG4gICAgaGVscGVycy5zYXZlLmNhbGwoaGVscGVycyk7XG4gIH0pO1xuXG4gIC8vIERlbGV0ZSBmaWVsZFxuICAkc3RhZ2Uub24oJ2NsaWNrIHRvdWNoc3RhcnQnLCAnLmRlbGV0ZS1jb25maXJtJywgZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgYnV0dG9uUG9zaXRpb24gPSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICBwYWdlWDogYnV0dG9uUG9zaXRpb24ubGVmdCArIChidXR0b25Qb3NpdGlvbi53aWR0aCAvIDIpLFxuICAgICAgICBwYWdlWTogKGJ1dHRvblBvc2l0aW9uLnRvcCAtIGJvZHlSZWN0LnRvcCkgLSAxMlxuICAgICAgfTtcblxuICAgIGxldCBkZWxldGVJRCA9ICQoZS50YXJnZXQpLnBhcmVudHMoJy5mb3JtLWZpZWxkOmVxKDApJykuYXR0cignaWQnKTtcbiAgICBjb25zdCAkZmllbGQgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlbGV0ZUlEKSk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb2RhbENsb3NlZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgJGZpZWxkLnJlbW92ZUNsYXNzKCdkZWxldGluZycpO1xuICAgIH0sIGZhbHNlKTtcblxuICAgIC8vIENoZWNrIGlmIHVzZXIgaXMgc3VyZSB0aGV5IHdhbnQgdG8gcmVtb3ZlIHRoZSBmaWVsZFxuICAgIGlmIChvcHRzLmZpZWxkUmVtb3ZlV2Fybikge1xuICAgICAgbGV0IHdhcm5IMyA9IHV0aWxzLm1hcmt1cCgnaDMnLCBpMThuLndhcm5pbmcpO1xuICAgICAgbGV0IHdhcm5NZXNzYWdlID0gdXRpbHMubWFya3VwKCdwJywgaTE4bi5maWVsZFJlbW92ZVdhcm5pbmcpO1xuICAgICAgaGVscGVycy5jb25maXJtKFt3YXJuSDMsIHdhcm5NZXNzYWdlXSwgKCkgPT5cbiAgICAgICAgaGVscGVycy5yZW1vdmVGaWVsZChkZWxldGVJRCksIGNvb3Jkcyk7XG4gICAgICAkZmllbGQuYWRkQ2xhc3MoJ2RlbGV0aW5nJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlbHBlcnMucmVtb3ZlRmllbGQoZGVsZXRlSUQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVXBkYXRlIGJ1dHRvbiBzdHlsZSBzZWxlY3Rpb25cbiAgJHN0YWdlLm9uKCdjbGljaycsICcuc3R5bGUtd3JhcCBidXR0b24nLCBlID0+IHtcbiAgICBjb25zdCAkYnV0dG9uID0gJChlLnRhcmdldCk7XG4gICAgbGV0IHN0eWxlVmFsID0gJGJ1dHRvbi52YWwoKTtcbiAgICBsZXQgJGJ0blN0eWxlID0gJGJ1dHRvbi5wYXJlbnQoKS5wcmV2KCcuYnRuLXN0eWxlJyk7XG4gICAgJGJ0blN0eWxlLnZhbChzdHlsZVZhbCk7XG4gICAgJGJ1dHRvbi5zaWJsaW5ncygnLmJ0bicpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICRidXR0b24uYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgaGVscGVycy51cGRhdGVQcmV2aWV3KCRidG5TdHlsZS5jbG9zZXN0KCcuZm9ybS1maWVsZCcpKTtcbiAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcbiAgfSk7XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgdG8gdG9nZ2xlIHJlcXVpcmVkIGFzdGVyaXNrXG4gICRzdGFnZS5vbignY2xpY2snLCAnLmZsZC1yZXF1aXJlZCcsIGUgPT4ge1xuICAgICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5mb3JtLWZpZWxkJykuZmluZCgnLnJlcXVpcmVkLWFzdGVyaXNrJykudG9nZ2xlKCk7XG4gIH0pO1xuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIHRvIHRvZ2dsZSByb2xlcyB2aXNpYmlsaXR5XG4gICRzdGFnZS5vbignY2xpY2snLCAnaW5wdXQuZmxkLWFjY2VzcycsIGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgcm9sZXMgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCcuZm9ybS1maWVsZCcpLmZpbmQoJy5hdmFpbGFibGUtcm9sZXMnKTtcbiAgICBsZXQgZW5hYmxlUm9sZXNDQiA9ICQoZS50YXJnZXQpO1xuICAgIHJvbGVzLnNsaWRlVG9nZ2xlKDI1MCwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIWVuYWJsZVJvbGVzQ0IuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgJCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJywgcm9sZXMpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgdG8gYWRkIG5ldyBvcHRpb25zXG4gICRzdGFnZS5vbignY2xpY2snLCAnLmFkZC1vcHQnLCBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCAkb3B0aW9uV3JhcCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5maWVsZC1vcHRpb25zJyk7XG4gICAgbGV0ICRtdWx0aXBsZSA9ICQoJ1tuYW1lPVwibXVsdGlwbGVcIl0nLCAkb3B0aW9uV3JhcCk7XG4gICAgbGV0ICRmaXJzdE9wdGlvbiA9ICQoJy5vcHRpb24tc2VsZWN0ZWQ6ZXEoMCknLCAkb3B0aW9uV3JhcCk7XG4gICAgbGV0IGlzTXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIGlmICgkbXVsdGlwbGUubGVuZ3RoKSB7XG4gICAgICBpc011bHRpcGxlID0gJG11bHRpcGxlLnByb3AoJ2NoZWNrZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNNdWx0aXBsZSA9ICgkZmlyc3RPcHRpb24uYXR0cigndHlwZScpID09PSAnY2hlY2tib3gnKTtcbiAgICB9XG5cbiAgICBsZXQgbmFtZSA9ICRmaXJzdE9wdGlvbi5hdHRyKCduYW1lJyk7XG5cbiAgICAkKCcuc29ydGFibGUtb3B0aW9ucycsICRvcHRpb25XcmFwKS5hcHBlbmQoc2VsZWN0RmllbGRPcHRpb25zKG5hbWUsIGZhbHNlLCBpc011bHRpcGxlKSk7XG4gIH0pO1xuXG4gICRzdGFnZS5vbignbW91c2VvdmVyIG1vdXNlb3V0JywgJy5yZW1vdmUsIC5kZWwtYnV0dG9uJywgZSA9PlxuICAgICQoZS50YXJnZXQpLmNsb3Nlc3QoJ2xpJykudG9nZ2xlQ2xhc3MoJ2RlbGV0ZScpKTtcblxuICBsb2FkRmllbGRzKCk7XG5cbiAgJHN0YWdlLmNzcygnbWluLWhlaWdodCcsICRjYlVMLmhlaWdodCgpKTtcblxuICAvLyBJZiBvcHRpb24gc2V0LCBjb250cm9scyB3aWxsIHJlbWFpbiBpbiB2aWV3IGluIGVkaXRvclxuICBpZiAob3B0cy5zdGlja3lDb250cm9scy5lbmFibGUpIHtcbiAgICBoZWxwZXJzLnN0aWNreUNvbnRyb2xzKCRzdGFnZSk7XG4gIH1cblxuICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5sb2FkZWQpO1xuXG4gIC8vIE1ha2UgYWN0aW9ucyBhY2Nlc3NpYmxlXG4gIGZvcm1CdWlsZGVyLmFjdGlvbnMgPSB7XG4gICAgY2xlYXJGaWVsZHM6IGFuaW1hdGUgPT4gaGVscGVycy5yZW1vdmVBbGxGaWVsZHMoZC5zdGFnZSwgYW5pbWF0ZSksXG4gICAgc2hvd0RhdGE6IGhlbHBlcnMuc2hvd0RhdGEuYmluZChoZWxwZXJzKSxcbiAgICBzYXZlOiBoZWxwZXJzLnNhdmUuYmluZChoZWxwZXJzKSxcbiAgICBhZGRGaWVsZDogKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaGVscGVycy5zdG9wSW5kZXggPSBkYXRhLmZvcm1EYXRhLmxlbmd0aCA/IGluZGV4IDogdW5kZWZpbmVkO1xuICAgICAgcHJlcEZpZWxkVmFycyhmaWVsZCk7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5maWVsZEFkZGVkKTtcbiAgICB9LFxuICAgIHJlbW92ZUZpZWxkOiBoZWxwZXJzLnJlbW92ZUZpZWxkLmJpbmQoaGVscGVycyksXG4gICAgZ2V0RGF0YTogKHR5cGUgPSAnanMnKSA9PiB7XG4gICAgICBjb25zdCBzdGFnZSA9IGQuc3RhZ2U7XG4gICAgICBjb25zdCBoID0gaGVscGVycztcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIGpzOiAoKSA9PiBoLnByZXBEYXRhKHN0YWdlKSxcbiAgICAgICAgeG1sOiAoKSA9PiBoLnhtbFNhdmUoc3RhZ2UpLFxuICAgICAgICBqc29uOiAoKSA9PiB3aW5kb3cuSlNPTi5zdHJpbmdpZnkoaC5wcmVwRGF0YShzdGFnZSksIG51bGwsICdcXHQnKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGRhdGFbdHlwZV0oKTtcbiAgICB9LFxuICAgIHNldERhdGE6IGZvcm1EYXRhID0+IHtcbiAgICAgIGhlbHBlcnMucmVtb3ZlQWxsRmllbGRzKGQuc3RhZ2UsIGZhbHNlKTtcbiAgICAgIGxvYWRGaWVsZHMoZm9ybURhdGEpO1xuICAgIH0sXG4gICAgc2V0TGFuZzogYXN5bmMgbG9jYWxlID0+IHtcbiAgICAgIGF3YWl0IG1pMThuLnNldEN1cnJlbnQuY2FsbChtaTE4biwgbG9jYWxlKTtcbiAgICAgIGQuZW1wdHkoZWxlbWVudCk7XG4gICAgICBsZXQgZm9ybUJ1aWxkZXIgPSBuZXcgRm9ybUJ1aWxkZXIob3JpZ2luYWxPcHRzLCBlbGVtZW50KTtcbiAgICAgICQoZWxlbWVudCkuZGF0YSgnZm9ybUJ1aWxkZXInLCBmb3JtQnVpbGRlcik7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBmb3JtQnVpbGRlcjtcbn07XG5cblxuKGZ1bmN0aW9uKCAkICkge1xuICAkLmZuLmZvcm1CdWlsZGVyID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBsZXQgZWxlbXMgPSB0aGlzO1xuICAgIGxldCB7aTE4biwgLi4ub3B0c30gPSAkLmV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMsIHRydWUpO1xuICAgIGNvbmZpZy5vcHRzID0gb3B0cztcbiAgICBsZXQgaTE4bk9wdHMgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdEkxOG4sIGkxOG4sIHRydWUpO1xuICAgIGxldCBpbnN0YW5jZSA9IHtcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgZ2V0RGF0YTogbnVsbCxcbiAgICAgICAgc2V0RGF0YTogbnVsbCxcbiAgICAgICAgc2F2ZTogbnVsbCxcbiAgICAgICAgc2hvd0RhdGE6IG51bGwsXG4gICAgICAgIHNldExhbmc6IG51bGwsXG4gICAgICAgIGFkZEZpZWxkOiBudWxsLFxuICAgICAgICByZW1vdmVGaWVsZDogbnVsbCxcbiAgICAgICAgY2xlYXJGaWVsZHM6IG51bGxcbiAgICAgIH0sXG4gICAgICBnZXQgZm9ybURhdGEoKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5hY3Rpb25zLmdldERhdGEoJ2pzb24nKTtcbiAgICAgIH0sXG4gICAgICBwcm9taXNlOiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgbWkxOG4uaW5pdChpMThuT3B0cykudGhlbigoKSA9PiB7XG4gICAgICAgICAgZWxlbXMuZWFjaChpID0+IHtcbiAgICAgICAgICAgIGxldCBmb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcihvcHRzLCBlbGVtc1tpXSk7XG4gICAgICAgICAgICAkKGVsZW1zW2ldKS5kYXRhKCdmb3JtQnVpbGRlcicsIGZvcm1CdWlsZGVyKTtcbiAgICAgICAgICAgIGluc3RhbmNlLmFjdGlvbnMgPSBmb3JtQnVpbGRlci5hY3Rpb25zO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRlbGV0ZSBpbnN0YW5jZS5wcm9taXNlO1xuICAgICAgICAgIHJlc29sdmUoaW5zdGFuY2UpO1xuICAgICAgICB9KS5jYXRjaChyZWplY3QpO1xuICAgICAgfSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufSkoIGpRdWVyeSApO1xuIiwiaW1wb3J0IHtpbnN0YW5jZURvbSwgZGVmYXVsdFN1YnR5cGVzLCBlbXB0eSwgb3B0aW9uRmllbGRzUmVnRXh9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7aW5zdGFuY2VEYXRhfSBmcm9tICcuL2RhdGEnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgbWkxOG4gZnJvbSAnbWkxOG4nO1xuaW1wb3J0IHtjb25maWd9IGZyb20gJy4vY29uZmlnJztcblxuY29uc3Qgb3B0cyA9IGNvbmZpZy5vcHRzO1xuY29uc3QgbSA9IHV0aWxzLm1hcmt1cDtcblxuLyoqXG4gKiBVdGlsaXRpZXMgc3BlY2lmaWMgdG8gZm9ybS1idWlsZGVyLmpzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlbHBlcnMge1xuICAvKipcbiAgICogU2V0dXAgZGVmYXVsdHMsIGdldCBpbnN0YW5jZSBkYXRhIGFuZCBkb21cbiAgICogQHBhcmFtICB7U3RyaW5nfSBmb3JtSUQgW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgY29uc3RydWN0b3IoZm9ybUlEKSB7XG4gICAgdGhpcy5kYXRhID0gaW5zdGFuY2VEYXRhW2Zvcm1JRF07XG4gICAgdGhpcy5kID0gaW5zdGFuY2VEb21bZm9ybUlEXTtcbiAgICB0aGlzLmRvQ2FuY2VsID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHdoZW4gYSBkcmFnIGJlZ2luc1xuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGV2ZW50XG4gICAqIEBwYXJhbSAge09iamVjdH0gdWlcbiAgICovXG4gIHN0YXJ0TW92aW5nKGV2ZW50LCB1aSkge1xuICAgIHVpLml0ZW0uc2hvdygpLmFkZENsYXNzKCdtb3ZpbmcnKTtcbiAgICB0aGlzLmRvQ2FuY2VsID0gdHJ1ZTtcbiAgICB0aGlzLmZyb20gPSB1aS5pdGVtLnBhcmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB3aGVuIGEgZHJhZyBlbmRzXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSB1aVxuICAgKi9cbiAgc3RvcE1vdmluZyhldmVudCwgdWkpIHtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgIHVpLml0ZW0ucmVtb3ZlQ2xhc3MoJ21vdmluZycpO1xuICAgIGlmIChfdGhpcy5kb0NhbmNlbCkge1xuICAgICAgaWYgKHVpLnNlbmRlcikge1xuICAgICAgICAkKHVpLnNlbmRlcikuc29ydGFibGUoJ2NhbmNlbCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5mcm9tLnNvcnRhYmxlKCdjYW5jZWwnKTtcbiAgICB9XG4gICAgX3RoaXMuc2F2ZSgpO1xuICAgIF90aGlzLmRvQ2FuY2VsID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogalF1ZXJ5IFVJIHNvcnRhYmxlIGJlZm9yZVN0b3AgY2FsbGJhY2sgdXNlZCBmb3IgYm90aCBsaXN0cy5cbiAgICogTG9naWMgZm9yIGNhbmNlbGluZyB0aGUgc29ydCBvciBkcm9wLlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGV2ZW50XG4gICAqIEBwYXJhbSAge09iamVjdH0gdWlcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIGJlZm9yZVN0b3AoZXZlbnQsIHVpKSB7XG4gICAgbGV0IF90aGlzID0gdGhpcztcbiAgICBjb25zdCBvcHRzID0gY29uZmlnLm9wdHM7XG4gICAgY29uc3QgZm9ybSA9IF90aGlzLmQuc3RhZ2U7XG4gICAgbGV0IGxhc3RJbmRleCA9IGZvcm0uY2hpbGROb2Rlcy5sZW5ndGggLSAxO1xuICAgIGxldCBjYW5jZWxBcnJheSA9IFtdO1xuICAgIF90aGlzLnN0b3BJbmRleCA9IHVpLnBsYWNlaG9sZGVyLmluZGV4KCkgLSAxO1xuXG4gICAgaWYgKCFvcHRzLnNvcnRhYmxlQ29udHJvbHMgJiYgdWkuaXRlbS5wYXJlbnQoKS5oYXNDbGFzcygnZnJtYi1jb250cm9sJykpIHtcbiAgICAgIGNhbmNlbEFycmF5LnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMucHJlcGVuZCkge1xuICAgICAgY2FuY2VsQXJyYXkucHVzaChfdGhpcy5zdG9wSW5kZXggPT09IDApO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmFwcGVuZCkge1xuICAgICAgY2FuY2VsQXJyYXkucHVzaCgoX3RoaXMuc3RvcEluZGV4ICsgMSkgPT09IGxhc3RJbmRleCk7XG4gICAgfVxuXG4gICAgX3RoaXMuZG9DYW5jZWwgPSBjYW5jZWxBcnJheS5zb21lKGVsZW0gPT4gZWxlbSA9PT0gdHJ1ZSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byBnZXQgZWxlbWVudCB0eXBlIGFuZCBzdWJ0eXBlXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gJGZpZWxkXG4gICAqIEByZXR1cm4ge09iamVjdH0ge3R5cGU6ICdmaWVsZFR5cGUnLCBzdWJ0eXBlOiAnZmllbGRTdWJUeXBlJ31cbiAgICovXG4gIGdldFR5cGVzKCRmaWVsZCkge1xuICAgIGxldCB0eXBlcyA9IHtcbiAgICAgICAgdHlwZTogJGZpZWxkLmF0dHIoJ3R5cGUnKVxuICAgICAgfTtcbiAgICBsZXQgc3VidHlwZSA9ICQoJy5mbGQtc3VidHlwZScsICRmaWVsZCkudmFsKCk7XG5cbiAgICBpZiAoc3VidHlwZSAhPT0gdHlwZXMudHlwZSkge1xuICAgICAgdHlwZXMuc3VidHlwZSA9IHN1YnR5cGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvcHRpb24gZGF0YSBmb3IgYSBmaWVsZFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGZpZWxkIGpRdWVyeSBmaWVsZCBvYmplY3RcbiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICBBcnJheSBvZiBvcHRpb24gdmFsdWVzXG4gICAqL1xuICBmaWVsZE9wdGlvbkRhdGEoZmllbGQpIHtcbiAgICBsZXQgb3B0aW9ucyA9IFtdO1xuXG4gICAgJCgnLnNvcnRhYmxlLW9wdGlvbnMgbGknLCBmaWVsZCkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIGxldCAkb3B0aW9uID0gJCh0aGlzKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gJCgnLm9wdGlvbi1zZWxlY3RlZCcsICRvcHRpb24pLmlzKCc6Y2hlY2tlZCcpO1xuICAgICAgbGV0IGF0dHJzID0ge1xuICAgICAgICAgIGxhYmVsOiAkKCcub3B0aW9uLWxhYmVsJywgJG9wdGlvbikudmFsKCksXG4gICAgICAgICAgdmFsdWU6ICQoJy5vcHRpb24tdmFsdWUnLCAkb3B0aW9uKS52YWwoKVxuICAgICAgICB9O1xuXG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgYXR0cnMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgb3B0aW9ucy5wdXNoKGF0dHJzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFhNTCBzYXZlXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gZm9ybSBzb3J0YWJsZUZpZWxkcyBub2RlXG4gICAqIEByZXR1cm4ge1N0cmluZ30geG1sIGluIHN0cmluZ1xuICAgKi9cbiAgeG1sU2F2ZShmb3JtKSB7XG4gICAgbGV0IGZvcm1EYXRhID0gdGhpcy5wcmVwRGF0YShmb3JtKTtcbiAgICBsZXQgeG1sID0gWyc8Zm9ybS10ZW1wbGF0ZT5cXG5cXHQ8ZmllbGRzPiddO1xuXG4gICAgdXRpbHMuZm9yRWFjaChmb3JtRGF0YSwgZnVuY3Rpb24oZmllbGRJbmRleCwgZmllbGQpIHtcbiAgICAgIGxldCBmaWVsZENvbnRlbnQgPSBudWxsO1xuICAgICAgY29uc3Qgb3B0aW9uRmllbGRzID0gb3B0aW9uRmllbGRzUmVnRXg7XG5cbiAgICAgIC8vIEhhbmRsZSBvcHRpb25zXG4gICAgICBpZiAoZmllbGQudHlwZS5tYXRjaChvcHRpb25GaWVsZHMpKSB7XG4gICAgICAgIGxldCBvcHRpb25EYXRhID0gZmllbGQudmFsdWVzO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9uRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBvcHRpb24gPSBtKCdvcHRpb24nLCBvcHRpb25EYXRhW2ldLmxhYmVsLCBvcHRpb25EYXRhW2ldKS5vdXRlckhUTUw7XG4gICAgICAgICAgb3B0aW9ucy5wdXNoKCdcXG5cXHRcXHRcXHQnICsgb3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnB1c2goJ1xcblxcdFxcdCcpO1xuXG4gICAgICAgIGZpZWxkQ29udGVudCA9IG9wdGlvbnMuam9pbignJyk7XG4gICAgICAgIGRlbGV0ZSBmaWVsZC52YWx1ZXM7XG4gICAgICB9XG5cbiAgICAgIGxldCB4bWxGaWVsZCA9IG0oJ2ZpZWxkJywgZmllbGRDb250ZW50LCBmaWVsZCk7XG4gICAgICB4bWwucHVzaCgnXFxuXFx0XFx0JyArIHhtbEZpZWxkLm91dGVySFRNTCk7XG4gICAgfSk7XG5cbiAgICB4bWwucHVzaCgnXFxuXFx0PC9maWVsZHM+XFxuPC9mb3JtLXRlbXBsYXRlPicpO1xuXG4gICAgcmV0dXJuIHhtbC5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZm9ybURhdGEgZnJvbSBlZGl0b3IgaW4gSlMgT2JqZWN0IGZvcm1hdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGZvcm0gYWthIHN0YWdlLCBET00gZWxlbWVudFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGZvcm1EYXRhXG4gICAqL1xuICBwcmVwRGF0YShmb3JtKSB7XG4gICAgbGV0IGZvcm1EYXRhID0gW107XG4gICAgbGV0IGQgPSB0aGlzLmQ7XG4gICAgbGV0IF90aGlzID0gdGhpcztcblxuICAgIGlmIChmb3JtLmNoaWxkTm9kZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAvLyBidWlsZCBkYXRhIG9iamVjdFxuICAgICAgdXRpbHMuZm9yRWFjaChmb3JtLmNoaWxkTm9kZXMsIGFzeW5jIGZ1bmN0aW9uKGluZGV4LCBmaWVsZCkge1xuICAgICAgICBsZXQgJGZpZWxkID0gJChmaWVsZCk7XG5cbiAgICAgICAgaWYgKCEoJGZpZWxkLmhhc0NsYXNzKCdkaXNhYmxlZC1maWVsZCcpKSkge1xuICAgICAgICAgIGxldCBmaWVsZERhdGEgPSBfdGhpcy5nZXRUeXBlcygkZmllbGQpO1xuICAgICAgICAgIGxldCByb2xlVmFscyA9ICQoJy5yb2xlcy1maWVsZDpjaGVja2VkJywgZmllbGQpLm1hcChlbGVtID0+IGVsZW0udmFsdWUpLmdldCgpO1xuXG4gICAgICAgICAgX3RoaXMuc2V0QXR0clZhbHMoZmllbGQsIGZpZWxkRGF0YSk7XG5cbiAgICAgICAgICBpZiAoZmllbGREYXRhLnN1YnR5cGUpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZERhdGEuc3VidHlwZSA9PT0gJ3F1aWxsJykge1xuICAgICAgICAgICAgICBsZXQgaWQgPSBgJHtmaWVsZERhdGEubmFtZX0tcHJldmlld2A7XG4gICAgICAgICAgICAgIGlmICh3aW5kb3cuZmJFZGl0b3JzLnF1aWxsW2lkXSkge1xuICAgICAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHdpbmRvdy5mYkVkaXRvcnMucXVpbGxbaWRdLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBpbnN0YW5jZS5nZXRDb250ZW50cygpO1xuICAgICAgICAgICAgICAgIGZpZWxkRGF0YS52YWx1ZSA9IHdpbmRvdy5KU09OLnN0cmluZ2lmeShkYXRhLm9wcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZihmaWVsZERhdGEuc3VidHlwZSA9PT0gJ3RpbnltY2UnICYmIHdpbmRvdy50aW55bWNlKSB7XG4gICAgICAgICAgICAgIGxldCBpZCA9IGAke2ZpZWxkRGF0YS5uYW1lfS1wcmV2aWV3YDtcbiAgICAgICAgICAgICAgaWYgKHdpbmRvdy50aW55bWNlLmVkaXRvcnNbaWRdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVkaXRvciA9IHdpbmRvdy50aW55bWNlLmVkaXRvcnNbaWRdO1xuICAgICAgICAgICAgICAgIGZpZWxkRGF0YS52YWx1ZSA9IGVkaXRvci5nZXRDb250ZW50KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocm9sZVZhbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmaWVsZERhdGEucm9sZSA9IHJvbGVWYWxzLmpvaW4oJywnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWVsZERhdGEuY2xhc3NOYW1lID0gZmllbGREYXRhLmNsYXNzTmFtZSB8fCBmaWVsZERhdGEuY2xhc3M7XG5cbiAgICAgICAgICBsZXQgbWF0Y2ggPSAvKD86XnxcXHMpYnRuLSguKj8pKD86XFxzfCQpL2cuZXhlYyhmaWVsZERhdGEuY2xhc3NOYW1lKTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGZpZWxkRGF0YS5zdHlsZSA9IG1hdGNoWzFdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkRGF0YSA9IHV0aWxzLnRyaW1PYmooZmllbGREYXRhKTtcblxuICAgICAgICAgIGxldCBtdWx0aXBsZUZpZWxkID0gZmllbGREYXRhLnR5cGUubWF0Y2goZC5vcHRpb25GaWVsZHNSZWdFeCk7XG5cbiAgICAgICAgICBpZiAobXVsdGlwbGVGaWVsZCkge1xuICAgICAgICAgICAgZmllbGREYXRhLnZhbHVlcyA9IF90aGlzLmZpZWxkT3B0aW9uRGF0YSgkZmllbGQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvcm1EYXRhLnB1c2goZmllbGREYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbmQgc2V0IHRoZSBkYXRhIGZvciBhbiBlZGl0b3IuIE1haW5seVxuICAgKiBhIHdyYXBwZXIgZm9yIGhhbmRsaW5nIGRhdGFUeXBlIG9wdGlvblxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGZvcm1EYXRhXG4gICAqIEByZXR1cm4ge09iamVjdH0gZm9ybURhdGFcbiAgICovXG4gIGdldERhdGEoZm9ybURhdGEpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBpZiAoIWZvcm1EYXRhKSB7XG4gICAgICBmb3JtRGF0YSA9IGNvbmZpZy5vcHRzLmZvcm1EYXRhO1xuICAgIH1cblxuICAgIGlmICghZm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgc2V0RGF0YSA9IHtcbiAgICAgIHhtbDogZm9ybURhdGEgPT4gdXRpbHMucGFyc2VYTUwoZm9ybURhdGEpLFxuICAgICAganNvbjogZm9ybURhdGEgPT4gd2luZG93LkpTT04ucGFyc2UoZm9ybURhdGEpXG4gICAgfTtcblxuICAgIGRhdGEuZm9ybURhdGEgPSBzZXREYXRhW2NvbmZpZy5vcHRzLmRhdGFUeXBlXShmb3JtRGF0YSkgfHwgW107XG5cbiAgICByZXR1cm4gZGF0YS5mb3JtRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhbmQgcmV0dXJucyBmb3JtRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhZ2UgRE9NIGVsZW1lbnRcbiAgICogQHJldHVybiB7WE1MfEpTT059IGZvcm1EYXRhXG4gICAqL1xuICBzYXZlKHN0YWdlKSB7XG4gICAgbGV0IF90aGlzID0gdGhpcztcbiAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBpZighc3RhZ2UpIHtcbiAgICAgIHN0YWdlID0gdGhpcy5kLnN0YWdlO1xuICAgIH1cbiAgICBsZXQgZG9TYXZlID0ge1xuICAgICAgeG1sOiAoKSA9PiBfdGhpcy54bWxTYXZlKHN0YWdlKSxcbiAgICAgIGpzb246ICgpID0+XG4gICAgICB3aW5kb3cuSlNPTi5zdHJpbmdpZnkoX3RoaXMucHJlcERhdGEoc3RhZ2UpLCBudWxsLCAnXFx0JylcbiAgICB9O1xuXG4gICAgLy8gc2F2ZSBhY3Rpb24gZm9yIGN1cnJlbnQgYGRhdGFUeXBlYFxuICAgIGRhdGEuZm9ybURhdGEgPSBkb1NhdmVbY29uZmlnLm9wdHMuZGF0YVR5cGVdKHN0YWdlKTtcblxuICAgIC8vIHRyaWdnZXIgZm9ybVNhdmVkIGV2ZW50XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudHMuZm9ybVNhdmVkKTtcbiAgICByZXR1cm4gZGF0YS5mb3JtRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbmNyZW1lbnRzIHRoZSBmaWVsZCBpZHMgd2l0aCBzdXBwb3J0IGZvciBtdWx0aXBsZSBlZGl0b3JzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gaWQgZmllbGQgSURcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICBpbmNyZW1lbnRlZCBmaWVsZCBJRFxuICAgKi9cbiAgaW5jcmVtZW50SWQoaWQpIHtcbiAgICBsZXQgc3BsaXQgPSBpZC5sYXN0SW5kZXhPZignLScpO1xuICAgIGxldCBuZXdGaWVsZE51bWJlciA9IHBhcnNlSW50KGlkLnN1YnN0cmluZyhzcGxpdCArIDEpKSArIDE7XG4gICAgbGV0IGJhc2VTdHJpbmcgPSBpZC5zdWJzdHJpbmcoMCwgc3BsaXQpO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VTdHJpbmd9LSR7bmV3RmllbGROdW1iZXJ9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlcyBmb3IgZmllbGQgYXR0cmlidXRlcyBpbiB0aGUgZWRpdG9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZFxuICAgKiBAcGFyYW0ge09iamVjdH0gZmllbGREYXRhXG4gICAqL1xuICBzZXRBdHRyVmFscyhmaWVsZCwgZmllbGREYXRhKSB7XG4gICAgbGV0IGF0dHJzID0gZmllbGQucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cImZsZC1cIl0nKTtcbiAgICBhdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgbGV0IHZhbHVlO1xuICAgICAgbGV0IG5hbWUgPSB1dGlscy5jYW1lbENhc2UoYXR0ci5nZXRBdHRyaWJ1dGUoJ25hbWUnKSk7XG4gICAgICBpZiAoYXR0ci5hdHRyaWJ1dGVzWydjb250ZW50ZWRpdGFibGUnXSkge1xuICAgICAgICB2YWx1ZSA9IGF0dHIuaW5uZXJIVE1MO1xuICAgICAgfSBlbHNlIGlmIChhdHRyLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgdmFsdWUgPSBhdHRyLmNoZWNrZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGF0dHIudmFsdWU7XG4gICAgICB9XG4gICAgICBmaWVsZERhdGFbbmFtZV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0IGZpZWxkIGF0dHJpYnV0ZSB2YWx1ZXMgYW5kIGNhbGwgZmllbGRQcmV2aWV3IHRvIGdlbmVyYXRlIHByZXZpZXdcbiAgICogQHBhcmFtICB7T2JqZWN0fSAkZmllbGQgalF1ZXJ5IERPTSBlbGVtZW50XG4gICAqL1xuICB1cGRhdGVQcmV2aWV3KCRmaWVsZCkge1xuICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgbGV0IGQgPSB0aGlzLmQ7XG4gICAgY29uc3QgZmllbGRDbGFzcyA9ICRmaWVsZC5hdHRyKCdjbGFzcycpO1xuICAgIGxldCBmaWVsZCA9ICRmaWVsZFswXTtcbiAgICBpZiAoZmllbGRDbGFzcy5pbmRleE9mKCdpbnB1dC1jb250cm9sJykgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpZWxkVHlwZSA9ICRmaWVsZC5hdHRyKCd0eXBlJyk7XG4gICAgbGV0ICRwcmV2SG9sZGVyID0gJCgnLnByZXYtaG9sZGVyJywgZmllbGQpO1xuICAgIGxldCBwcmV2aWV3RGF0YSA9IHtcbiAgICAgIHR5cGU6IGZpZWxkVHlwZVxuICAgIH07XG4gICAgbGV0IHByZXZpZXc7XG5cbiAgICBfdGhpcy5zZXRBdHRyVmFscyhmaWVsZCwgcHJldmlld0RhdGEpO1xuXG4gICAgbGV0IHN0eWxlID0gJCgnLmJ0bi1zdHlsZScsIGZpZWxkKS52YWwoKTtcbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHByZXZpZXdEYXRhLnN0eWxlID0gc3R5bGU7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkVHlwZS5tYXRjaChkLm9wdGlvbkZpZWxkc1JlZ0V4KSkge1xuICAgICAgcHJldmlld0RhdGEudmFsdWVzID0gW107XG4gICAgICBwcmV2aWV3RGF0YS5tdWx0aXBsZSA9ICQoJ1tuYW1lPVwibXVsdGlwbGVcIl0nLCBmaWVsZCkuaXMoJzpjaGVja2VkJyk7XG5cbiAgICAgICQoJy5zb3J0YWJsZS1vcHRpb25zIGxpJywgZmllbGQpLmVhY2goZnVuY3Rpb24oaSwgJG9wdGlvbikge1xuICAgICAgICBsZXQgb3B0aW9uID0ge307XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9ICQoJy5vcHRpb24tc2VsZWN0ZWQnLCAkb3B0aW9uKS5pcygnOmNoZWNrZWQnKTtcbiAgICAgICAgb3B0aW9uLnZhbHVlID0gJCgnLm9wdGlvbi12YWx1ZScsICRvcHRpb24pLnZhbCgpO1xuICAgICAgICBvcHRpb24ubGFiZWwgPSAkKCcub3B0aW9uLWxhYmVsJywgJG9wdGlvbikudmFsKCk7XG4gICAgICAgIHByZXZpZXdEYXRhLnZhbHVlcy5wdXNoKG9wdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwcmV2aWV3RGF0YSA9IHV0aWxzLnRyaW1PYmoocHJldmlld0RhdGEpO1xuXG4gICAgcHJldmlld0RhdGEuY2xhc3NOYW1lID0gX3RoaXMuY2xhc3NOYW1lcyhmaWVsZCwgcHJldmlld0RhdGEpO1xuICAgICQoJy5mbGQtY2xhc3NOYW1lJywgZmllbGQpLnZhbChwcmV2aWV3RGF0YS5jbGFzc05hbWUpO1xuXG4gICAgJGZpZWxkLmRhdGEoJ2ZpZWxkRGF0YScsIHByZXZpZXdEYXRhKTtcbiAgICBwcmV2aWV3ID0gdXRpbHMuZ2V0VGVtcGxhdGUocHJldmlld0RhdGEsIHRydWUpO1xuXG4gICAgZW1wdHkoJHByZXZIb2xkZXJbMF0pO1xuICAgICRwcmV2SG9sZGVyWzBdLmFwcGVuZENoaWxkKHByZXZpZXcpO1xuICAgIHByZXZpZXcuZGlzcGF0Y2hFdmVudChldmVudHMuZmllbGRSZW5kZXJlZCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhIGN1c3RvbSB0b29sdGlwIGZvciBkaXNhYmxlZCBmaWVsZHMuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gZmllbGRcbiAgICovXG4gIGRpc2FibGVkVFQoc3RhZ2UpIHtcbiAgICBjb25zdCBtb3ZlID0gKGUsIGVsZW0pID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkT2Zmc2V0ID0gZWxlbS5maWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHggPSBlLmNsaWVudFggLSBmaWVsZE9mZnNldC5sZWZ0IC0gMjE7XG4gICAgICBjb25zdCB5ID0gZS5jbGllbnRZIC0gZmllbGRPZmZzZXQudG9wIC0gZWxlbS50dC5vZmZzZXRIZWlnaHQgLSAxMjtcbiAgICAgIGVsZW0udHQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuICAgIH07XG5cbiAgICBzdGFnZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGlzYWJsZWQtZmllbGQnKS5mb3JFYWNoKFxuICAgICAgZmllbGQgPT4ge1xuICAgICAgICBsZXQgdGl0bGUgPSBvcHRzLm1lc3NhZ2VzLmZpZWxkTm9uRWRpdGFibGU7XG5cbiAgICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgICAgbGV0IHR0ID0gdXRpbHMubWFya3VwKCdwJywgdGl0bGUsIHtjbGFzc05hbWU6ICdmcm1iLXR0J30pO1xuICAgICAgICAgIGZpZWxkLmFwcGVuZENoaWxkKHR0KTtcbiAgICAgICAgICBmaWVsZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBlID0+IG1vdmUoZSwge3R0LCBmaWVsZH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBjbGFzc05hbWVzIGZvciBmaWVsZFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGZpZWxkXG4gICAqIEBwYXJhbSAge09iamVjdH0gcHJldmlld0RhdGFcbiAgICogQHJldHVybiB7U3RyaW5nfSBjbGFzc05hbWVzXG4gICAqL1xuICBjbGFzc05hbWVzKGZpZWxkLCBwcmV2aWV3RGF0YSkge1xuICAgIGxldCBjbGFzc05hbWUgPSBmaWVsZC5xdWVyeVNlbGVjdG9yKCcuZmxkLWNsYXNzTmFtZScpO1xuICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBpO1xuICAgIGxldCB0eXBlID0gcHJldmlld0RhdGEudHlwZTtcbiAgICBsZXQgc3R5bGUgPSBwcmV2aWV3RGF0YS5zdHlsZTtcbiAgICBsZXQgY2xhc3NlcyA9IGNsYXNzTmFtZS52YWx1ZS5zcGxpdCgnICcpO1xuICAgIGxldCB0eXBlcyA9IHtcbiAgICAgIGJ1dHRvbjogJ2J0bicsXG4gICAgICBzdWJtaXQ6ICdidG4nXG4gICAgfTtcblxuICAgIGxldCBwcmltYXJ5VHlwZSA9IHR5cGVzW3R5cGVdO1xuXG4gICAgaWYgKHByaW1hcnlUeXBlKSB7XG4gICAgICBpZiAoc3R5bGUpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsZXQgcmUgPSBuZXcgUmVnRXhwKGAoPzpefFxccykke3ByaW1hcnlUeXBlfS0oLio/KSg/Olxcc3wkKStgLCAnZycpO1xuICAgICAgICAgIGxldCBtYXRjaCA9IGNsYXNzZXNbaV0ubWF0Y2gocmUpO1xuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY2xhc3Nlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNsYXNzZXMucHVzaChwcmltYXJ5VHlwZSArICctJyArIHN0eWxlKTtcbiAgICAgIH1cbiAgICAgIGNsYXNzZXMucHVzaChwcmltYXJ5VHlwZSk7XG4gICAgfVxuXG4gICAgLy8gcmV2ZXJzZSB0aGUgYXJyYXkgdG8gcHV0IGN1c3RvbSBjbGFzc2VzIGF0IGVuZCxcbiAgICAvLyByZW1vdmUgYW55IGR1cGxpY2F0ZXMsIGNvbnZlcnQgdG8gc3RyaW5nLCByZW1vdmUgd2hpdGVzcGFjZVxuICAgIHJldHVybiB1dGlscy51bmlxdWUoY2xhc3Nlcykuam9pbignICcpLnRyaW0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYW5kIG9wZW4gZGlhbG9nXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gb3ZlcmxheSBFeGlzdGluZyBvdmVybGF5IGlmIHRoZXJlIGlzIG9uZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGRpYWxvZyAgRXhpc3RpbmcgZGlhbG9nXG4gICAqL1xuICBjbG9zZUNvbmZpcm0ob3ZlcmxheSwgZGlhbG9nKSB7XG4gICAgaWYgKCFvdmVybGF5KSB7XG4gICAgICBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9ybS1idWlsZGVyLW92ZXJsYXknKVswXTtcbiAgICB9XG4gICAgaWYgKCFkaWFsb2cpIHtcbiAgICAgIGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Zvcm0tYnVpbGRlci1kaWFsb2cnKVswXTtcbiAgICB9XG4gICAgb3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7XG4gICAgZGlhbG9nLnJlbW92ZSgpO1xuICAgIG92ZXJsYXkucmVtb3ZlKCk7XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudHMubW9kYWxDbG9zZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxheW91dCBkYXRhIGJhc2VkIG9uIGNvbnRyb2xQb3NpdGlvbiBvcHRpb25cbiAgICogQHBhcmFtICB7U3RyaW5nfSBjb250cm9sUG9zaXRpb24gJ2xlZnQnIG9yICdyaWdodCdcbiAgICogQHJldHVybiB7T2JqZWN0fSBsYXlvdXQgb2JqZWN0XG4gICAqL1xuICBlZGl0b3JMYXlvdXQoY29udHJvbFBvc2l0aW9uKSB7XG4gICAgbGV0IGxheW91dE1hcCA9IHtcbiAgICAgIGxlZnQ6IHtcbiAgICAgICAgc3RhZ2U6ICdwdWxsLXJpZ2h0JyxcbiAgICAgICAgY29udHJvbHM6ICdwdWxsLWxlZnQnXG4gICAgICB9LFxuICAgICAgcmlnaHQ6IHtcbiAgICAgICAgc3RhZ2U6ICdwdWxsLWxlZnQnLFxuICAgICAgICBjb250cm9sczogJ3B1bGwtcmlnaHQnXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBsYXlvdXRNYXBbY29udHJvbFBvc2l0aW9uXSA/IGxheW91dE1hcFtjb250cm9sUG9zaXRpb25dIDogJyc7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvdmVybGF5IHRvIHRoZSBwYWdlLiBVc2VkIGZvciBtb2RhbHMuXG4gICAqIEByZXR1cm4ge09iamVjdH0gRE9NIE9iamVjdFxuICAgKi9cbiAgc2hvd092ZXJsYXkoKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGxldCBvdmVybGF5ID0gdXRpbHMubWFya3VwKCdkaXYnLCBudWxsLCB7XG4gICAgICBjbGFzc05hbWU6ICdmb3JtLWJ1aWxkZXItb3ZlcmxheSdcbiAgICB9KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICAgIG92ZXJsYXkuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpO1xuXG4gICAgb3ZlcmxheS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBfdGhpcy5jbG9zZUNvbmZpcm0ob3ZlcmxheSk7XG4gICAgfTtcblxuICAgIHJldHVybiBvdmVybGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBjb25maXJtYXRpb24gZGlhbG9nXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gIG1lc3NhZ2UgICBDb250ZW50IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZGlhbG9nXG4gICAqIEBwYXJhbSAge0Z1bmN9ICB5ZXNBY3Rpb24gY2FsbGJhY2sgdG8gZmlyZSBpZiB0aGV5IGNvbmZpcm1cbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gY29vcmRzICAgIGxvY2F0aW9uIHRvIHB1dCB0aGUgZGlhbG9nXG4gICAqIEBwYXJhbSAge1N0cmluZ30gIGNsYXNzTmFtZSBDdXN0b20gY2xhc3MgdG8gYmUgYWRkZWQgdG8gdGhlIGRpYWxvZ1xuICAgKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgICAgUmVmZXJlbmNlIHRvIHRoZSBtb2RhbFxuICAgKi9cbiAgY29uZmlybShtZXNzYWdlLCB5ZXNBY3Rpb24sIGNvb3JkcyA9IGZhbHNlLCBjbGFzc05hbWUgPSAnJykge1xuICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICBsZXQgaTE4biA9IG1pMThuLmN1cnJlbnQ7XG4gICAgbGV0IG92ZXJsYXkgPSBfdGhpcy5zaG93T3ZlcmxheSgpO1xuICAgIGxldCB5ZXMgPSBtKCdidXR0b24nLCBpMThuLnllcywge1xuICAgICAgY2xhc3NOYW1lOiAneWVzIGJ0biBidG4tc3VjY2VzcyBidG4tc20nXG4gICAgfSk7XG4gICAgbGV0IG5vID0gbSgnYnV0dG9uJywgaTE4bi5ubywge1xuICAgICAgY2xhc3NOYW1lOiAnbm8gYnRuIGJ0bi1kYW5nZXIgYnRuLXNtJ1xuICAgIH0pO1xuXG4gICAgbm8ub25jbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgX3RoaXMuY2xvc2VDb25maXJtKG92ZXJsYXkpO1xuICAgIH07XG5cbiAgICB5ZXMub25jbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgeWVzQWN0aW9uKCk7XG4gICAgICBfdGhpcy5jbG9zZUNvbmZpcm0ob3ZlcmxheSk7XG4gICAgfTtcblxuICAgIGxldCBidG5XcmFwID0gbSgnZGl2JywgW25vLCB5ZXNdLCB7Y2xhc3NOYW1lOiAnYnV0dG9uLXdyYXAnfSk7XG5cbiAgICBjbGFzc05hbWUgPSAnZm9ybS1idWlsZGVyLWRpYWxvZyAnICsgY2xhc3NOYW1lO1xuXG4gICAgbGV0IG1pbmlNb2RhbCA9IG0oJ2RpdicsIFttZXNzYWdlLCBidG5XcmFwXSwge2NsYXNzTmFtZX0pO1xuICAgIGlmICghY29vcmRzKSB7XG4gICAgICBjb25zdCBkRSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgcGFnZVg6IE1hdGgubWF4KGRFLmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKSAvIDIsXG4gICAgICAgIHBhZ2VZOiBNYXRoLm1heChkRS5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKSAvIDJcbiAgICAgIH07XG4gICAgICBtaW5pTW9kYWwuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW5pTW9kYWwuY2xhc3NMaXN0LmFkZCgncG9zaXRpb25lZCcpO1xuICAgIH1cblxuICAgIG1pbmlNb2RhbC5zdHlsZS5sZWZ0ID0gY29vcmRzLnBhZ2VYICsgJ3B4JztcbiAgICBtaW5pTW9kYWwuc3R5bGUudG9wID0gY29vcmRzLnBhZ2VZICsgJ3B4JztcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWluaU1vZGFsKTtcblxuICAgIHllcy5mb2N1cygpO1xuICAgIHJldHVybiBtaW5pTW9kYWw7XG4gIH1cblxuICAvKipcbiAgICogUG9wdXAgZGlhbG9nIHRoZSBkb2VzIG5vdCByZXF1aXJlIGNvbmZpcm1hdGlvbi5cbiAgICogQHBhcmFtICB7U3RyaW5nfERPTXxBcnJheX0gIGNvbnRlbnRcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gY29vcmRzICAgIGZhbHNlIGlmIG5vIGNvb3JkcyBhcmUgcHJvdmlkZWQuIFdpdGhvdXQgY29vcmRpbmF0ZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwb3B1cCB3aWxsIGFwcGVhciBjZW50ZXIgc2NyZWVuLlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9ICBjbGFzc05hbWUgY2xhc3NuYW1lIHRvIGJlIGFkZGVkIHRvIHRoZSBkaWFsb2dcbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgICAgIGRvbVxuICAgKi9cbiAgZGlhbG9nKGNvbnRlbnQsIGNvb3JkcyA9IGZhbHNlLCBjbGFzc05hbWUgPSAnJykge1xuICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICBsZXQgY2xpZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgbGV0IGNsaWVudEhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgX3RoaXMuc2hvd092ZXJsYXkoKTtcblxuICAgIGNsYXNzTmFtZSA9ICdmb3JtLWJ1aWxkZXItZGlhbG9nICcgKyBjbGFzc05hbWU7XG5cbiAgICBsZXQgbWluaU1vZGFsID0gdXRpbHMubWFya3VwKCdkaXYnLCBjb250ZW50LCB7Y2xhc3NOYW1lOiBjbGFzc05hbWV9KTtcbiAgICBpZiAoIWNvb3Jkcykge1xuICAgICAgY29vcmRzID0ge1xuICAgICAgICBwYWdlWDogTWF0aC5tYXgoY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApIC8gMixcbiAgICAgICAgcGFnZVk6IE1hdGgubWF4KGNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApIC8gMlxuICAgICAgfTtcbiAgICAgIG1pbmlNb2RhbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pbmlNb2RhbC5jbGFzc0xpc3QuYWRkKCdwb3NpdGlvbmVkJyk7XG4gICAgfVxuXG4gICAgbWluaU1vZGFsLnN0eWxlLmxlZnQgPSBjb29yZHMucGFnZVggKyAncHgnO1xuICAgIG1pbmlNb2RhbC5zdHlsZS50b3AgPSBjb29yZHMucGFnZVkgKyAncHgnO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtaW5pTW9kYWwpO1xuXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudHMubW9kYWxPcGVuZWQpO1xuXG4gICAgaWYgKGNsYXNzTmFtZS5pbmRleE9mKCdkYXRhLWRpYWxvZycpICE9PSAtMSkge1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudHMudmlld0RhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBtaW5pTW9kYWw7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybSBhbGwgZmllbGRzIHdpbGwgYmUgcmVtb3ZlZCB0aGVuIHJlbW92ZSB0aGVtXG4gICAqIEBwYXJhbSAge09iamVjdH0gZSBjbGljayBldmVudCBvYmplY3RcbiAgICovXG4gIGNvbmZpcm1SZW1vdmVBbGwoZSkge1xuICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgbGV0IGZvcm1JRCA9IGUudGFyZ2V0LmlkLm1hdGNoKC9mcm1iLVxcZHsxM30vKVswXTtcbiAgICBsZXQgc3RhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtSUQpO1xuICAgIGxldCBpMThuID0gbWkxOG4uY3VycmVudDtcbiAgICBsZXQgZmllbGRzID0gJCgnbGkuZm9ybS1maWVsZCcsIHN0YWdlKTtcbiAgICBsZXQgYnV0dG9uUG9zaXRpb24gPSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBsZXQgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBjb29yZHMgPSB7XG4gICAgICBwYWdlWDogYnV0dG9uUG9zaXRpb24ubGVmdCArIChidXR0b25Qb3NpdGlvbi53aWR0aCAvIDIpLFxuICAgICAgcGFnZVk6IChidXR0b25Qb3NpdGlvbi50b3AgLSBib2R5UmVjdC50b3ApIC0gMTJcbiAgICB9O1xuXG4gICAgaWYgKGZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIF90aGlzLmNvbmZpcm0oaTE4bi5jbGVhckFsbE1lc3NhZ2UsIGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5yZW1vdmVBbGxGaWVsZHMuY2FsbChfdGhpcywgc3RhZ2UpO1xuICAgICAgICBjb25maWcub3B0cy5ub3RpZnkuc3VjY2VzcyhpMThuLmFsbEZpZWxkc1JlbW92ZWQpO1xuICAgICAgICBjb25maWcub3B0cy5vbkNsZWFyQWxsKCk7XG4gICAgICB9LCBjb29yZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdGhpcy5kaWFsb2coaTE4bi5ub0ZpZWxkc1RvQ2xlYXIsIGNvb3Jkcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGZpZWxkcyBmcm9tIHRoZSBmb3JtXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gYW5pbWF0ZSB3aGV0aGVyIHRvIGFuaW1hdGUgb3Igbm90XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICByZW1vdmVBbGxGaWVsZHMoc3RhZ2UsIGFuaW1hdGUgPSB0cnVlKSB7XG4gICAgbGV0IF90aGlzID0gdGhpcztcbiAgICBsZXQgaTE4biA9IG1pMThuLmN1cnJlbnQ7XG4gICAgbGV0IG9wdHMgPSBjb25maWcub3B0cztcbiAgICBsZXQgZmllbGRzID0gc3RhZ2UucXVlcnlTZWxlY3RvckFsbCgnbGkuZm9ybS1maWVsZCcpO1xuICAgIGxldCBtYXJrRW1wdHlBcnJheSA9IFtdO1xuXG4gICAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMucHJlcGVuZCkge1xuICAgICAgbWFya0VtcHR5QXJyYXkucHVzaCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5hcHBlbmQpIHtcbiAgICAgIG1hcmtFbXB0eUFycmF5LnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXJrRW1wdHlBcnJheS5zb21lKGVsZW0gPT4gZWxlbSA9PT0gdHJ1ZSkpIHtcbiAgICAgIHN0YWdlLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZW1wdHknKTtcbiAgICAgIHN0YWdlLnBhcmVudEVsZW1lbnQuZGF0YXNldC5jb250ZW50ID0gaTE4bi5nZXRTdGFydGVkO1xuICAgIH1cblxuICAgIGlmIChhbmltYXRlKSB7XG4gICAgICBzdGFnZS5jbGFzc0xpc3QuYWRkKCdyZW1vdmluZycpO1xuICAgICAgbGV0IG91dGVySGVpZ2h0ID0gMDtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IG91dGVySGVpZ2h0ICs9IGZpZWxkLm9mZnNldEhlaWdodCArIDMpO1xuICAgICAgZmllbGRzWzBdLnN0eWxlLm1hcmdpblRvcCA9IGAkey1vdXRlckhlaWdodH1weGA7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZW1wdHkoc3RhZ2UpLmNsYXNzTGlzdC5yZW1vdmUoJ3JlbW92aW5nJyk7XG4gICAgICAgIF90aGlzLnNhdmUoc3RhZ2UpO1xuICAgICAgfSwgNDAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1wdHkoc3RhZ2UpO1xuICAgICAgX3RoaXMuc2F2ZShzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHVzZXIgcmUtb3JkZXJzIHRoZSBlbGVtZW50cyB0aGVpciBvcmRlciBzaG91bGQgYmUgc2F2ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkY2JVTCBvdXIgbGlzdCBvZiBlbGVtZW50c1xuICAgKi9cbiAgc2V0RmllbGRPcmRlcigkY2JVTCkge1xuICAgIGlmICghY29uZmlnLm9wdHMuc29ydGFibGVDb250cm9scykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBmaWVsZE9yZGVyID0ge307XG5cbiAgICAkY2JVTC5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgIGZpZWxkT3JkZXJbaW5kZXhdID0gJChlbGVtZW50KS5kYXRhKCd0eXBlJyk7XG4gICAgfSk7XG5cbiAgICBpZiAod2luZG93LnNlc3Npb25TdG9yYWdlKSB7XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZmllbGRPcmRlcicsIHdpbmRvdy5KU09OLnN0cmluZ2lmeShmaWVsZE9yZGVyKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlb3JkZXIgdGhlIGNvbnRyb2xzIGlmIHRoZSB1c2VyIGhhcyBwcmV2aW91c2x5IG9yZGVyZWQgdGhlbS5cbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXl9IGZybWJGaWVsZHNcbiAgICogQHJldHVybiB7QXJyYXl9IG9yZGVyZWQgZmllbGRzXG4gICAqL1xuICBvcmRlckZpZWxkcyhmcm1iRmllbGRzKSB7XG4gICAgY29uc3Qgb3B0cyA9IGNvbmZpZy5vcHRzO1xuICAgIGxldCBmaWVsZE9yZGVyID0gZmFsc2U7XG4gICAgbGV0IG5ld09yZGVyRmllbGRzID0gW107XG5cbiAgICBpZiAod2luZG93LnNlc3Npb25TdG9yYWdlKSB7XG4gICAgICBpZiAob3B0cy5zb3J0YWJsZUNvbnRyb2xzKSB7XG4gICAgICAgIGZpZWxkT3JkZXIgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZmllbGRPcmRlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2ZpZWxkT3JkZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZpZWxkT3JkZXIpIHtcbiAgICAgIGxldCBjb250cm9sT3JkZXIgPSBvcHRzLmNvbnRyb2xPcmRlci5jb25jYXQoZnJtYkZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICAgICAgZmllbGQuYXR0cnMudHlwZSkpO1xuICAgICAgZmllbGRPcmRlciA9IHV0aWxzLnVuaXF1ZShjb250cm9sT3JkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZE9yZGVyID0gd2luZG93LkpTT04ucGFyc2UoZmllbGRPcmRlcik7XG4gICAgICBmaWVsZE9yZGVyID0gT2JqZWN0LmtleXMoZmllbGRPcmRlcikubWFwKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkT3JkZXJbaV07XG4gICAgICB9KTtcbiAgICB9XG5cblxuICAgIGZpZWxkT3JkZXIuZm9yRWFjaCgoZmllbGRUeXBlKSA9PiB7XG4gICAgICBsZXQgZmllbGQgPSBmcm1iRmllbGRzLmZpbHRlcihmdW5jdGlvbihmaWVsZCkge1xuICAgICAgICByZXR1cm4gZmllbGQuYXR0cnMudHlwZSA9PT0gZmllbGRUeXBlO1xuICAgICAgfSlbMF07XG4gICAgICBuZXdPcmRlckZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdPcmRlckZpZWxkcy5maWx0ZXIoQm9vbGVhbik7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgZmllbGRzIGJlaW5nIGVkaXRpbmdcbiAgICogQHBhcmFtICB7T2JqZWN0fSBzdGFnZVxuICAgKi9cbiAgY2xvc2VBbGxFZGl0KCkge1xuICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICBjb25zdCBmaWVsZHMgPSAkKCc+IGxpLmVkaXRpbmcnLCBfdGhpcy5kLnN0YWdlKTtcbiAgICBjb25zdCB0b2dnbGVCdG5zID0gJCgnLnRvZ2dsZS1mb3JtJywgX3RoaXMuZC5zdGFnZSk7XG4gICAgY29uc3QgZWRpdFBhbmVscyA9ICQoJy5mcm0taG9sZGVyJywgZmllbGRzKTtcblxuICAgIHRvZ2dsZUJ0bnMucmVtb3ZlQ2xhc3MoJ29wZW4nKTtcbiAgICBmaWVsZHMucmVtb3ZlQ2xhc3MoJ2VkaXRpbmcnKTtcbiAgICAkKCcucHJldi1ob2xkZXInLCBmaWVsZHMpLnNob3coKTtcbiAgICBlZGl0UGFuZWxzLmhpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBlZGl0IG1vZGUgZm9yIHRoZSBnaXZlbiBmaWVsZFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGZpZWxkSWRcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gYW5pbWF0ZVxuICAgKi9cbiAgdG9nZ2xlRWRpdChmaWVsZElkLCBhbmltYXRlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRJZCk7XG4gICAgY29uc3QgdG9nZ2xlQnRuID0gJCgnLnRvZ2dsZS1mb3JtJywgZmllbGQpO1xuICAgIGNvbnN0IGVkaXRQYW5lbCA9ICQoJy5mcm0taG9sZGVyJywgZmllbGQpO1xuICAgIGZpZWxkLmNsYXNzTGlzdC50b2dnbGUoJ2VkaXRpbmcnKTtcbiAgICB0b2dnbGVCdG4udG9nZ2xlQ2xhc3MoJ29wZW4nKTtcbiAgICBpZiAoYW5pbWF0ZSkge1xuICAgICAgJCgnLnByZXYtaG9sZGVyJywgZmllbGQpLnNsaWRlVG9nZ2xlKDI1MCk7XG4gICAgICBlZGl0UGFuZWwuc2xpZGVUb2dnbGUoMjUwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJCgnLnByZXYtaG9sZGVyJywgZmllbGQpLnRvZ2dsZSgpO1xuICAgICAgZWRpdFBhbmVsLnRvZ2dsZSgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVByZXZpZXcoJChmaWVsZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIGZvbGxvdyBzY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZWRpdG9yXG4gICAqL1xuICBzdGlja3lDb250cm9scygpIHtcbiAgICBsZXQgZCA9IHRoaXMuZDtcbiAgICBjb25zdCAkY2JXcmFwID0gJChkLmNvbnRyb2xzKS5wYXJlbnQoKTtcbiAgICBjb25zdCAkc3RhZ2VXcmFwID0gJChkLnN0YWdlKS5wYXJlbnQoKTtcbiAgICBjb25zdCBjYldpZHRoID0gJGNiV3JhcC53aWR0aCgpO1xuICAgIGNvbnN0IGNiUG9zaXRpb24gPSBkLmNvbnRyb2xzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbihldnQpIHtcbiAgICAgIGxldCBzY3JvbGxUb3AgPSAkKGV2dC50YXJnZXQpLnNjcm9sbFRvcCgpO1xuICAgICAgY29uc3Qgb2Zmc2V0RGVmYXVsdHMgPSB7XG4gICAgICAgIHRvcDogNSxcbiAgICAgICAgYm90dG9tOiAnYXV0bycsXG4gICAgICAgIHJpZ2h0OiAnYXV0bycsXG4gICAgICAgIGxlZnQ6IGNiUG9zaXRpb24ubGVmdFxuICAgICAgfTtcblxuICAgICAgbGV0IG9mZnNldCA9IE9iamVjdC5hc3NpZ24oe30sIG9mZnNldERlZmF1bHRzLCBjb25maWcub3B0cy5zdGlja3lDb250cm9scy5vZmZzZXQpO1xuXG4gICAgICBpZiAoc2Nyb2xsVG9wID4gJHN0YWdlV3JhcC5vZmZzZXQoKS50b3ApIHtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgd2lkdGg6IGNiV2lkdGhcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjYlN0eWxlID0gT2JqZWN0LmFzc2lnbihzdHlsZSwgb2Zmc2V0KTtcblxuICAgICAgICBsZXQgY2JPZmZzZXQgPSAkY2JXcmFwLm9mZnNldCgpO1xuICAgICAgICBsZXQgc3RhZ2VPZmZzZXQgPSAkc3RhZ2VXcmFwLm9mZnNldCgpO1xuICAgICAgICBsZXQgY2JCb3R0b20gPSBjYk9mZnNldC50b3AgKyAkY2JXcmFwLmhlaWdodCgpO1xuICAgICAgICBsZXQgc3RhZ2VCb3R0b20gPSBzdGFnZU9mZnNldC50b3AgKyAkc3RhZ2VXcmFwLmhlaWdodCgpO1xuXG4gICAgICAgIGlmIChjYkJvdHRvbSA+IHN0YWdlQm90dG9tICYmIChjYk9mZnNldC50b3AgIT09IHN0YWdlT2Zmc2V0LnRvcCkpIHtcbiAgICAgICAgICAkY2JXcmFwLmNzcyh7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIHRvcDogJ2F1dG8nLFxuICAgICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICBsZWZ0OiAnYXV0bydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYkJvdHRvbSA8IHN0YWdlQm90dG9tIHx8IChjYkJvdHRvbSA9PT0gc3RhZ2VCb3R0b20gJiYgY2JPZmZzZXQudG9wID4gc2Nyb2xsVG9wKSkge1xuICAgICAgICAgICRjYldyYXAuY3NzKGNiU3R5bGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkLmNvbnRyb2xzLnBhcmVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSBkaWFsb2cgd2l0aCB0aGUgZm9ybSdzIGRhdGFcbiAgICovXG4gIHNob3dEYXRhKGUpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdXRpbHMuZXNjYXBlSHRtbChkYXRhLmZvcm1EYXRhKTtcbiAgICBjb25zdCBjb2RlID0gbSgnY29kZScsIGZvcm1EYXRhLCB7XG4gICAgICBjbGFzc05hbWU6IGBmb3JtRGF0YS0ke2NvbmZpZy5vcHRzLmRhdGFUeXBlfWBcbiAgICB9KTtcblxuICAgIHRoaXMuZGlhbG9nKG0oJ3ByZScsIGNvZGUpLCBudWxsLCAnZGF0YS1kaWFsb2cnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBmaWVsZCBmcm9tIHRoZSBzdGFnZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9ICBmaWVsZElEIElEIG9mIHRoZSBmaWVsZCB0byBiZSByZW1vdmVkXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGZpZWxkUmVtb3ZlZCByZXR1cm5zIHRydWUgaWYgZmllbGQgaXMgcmVtb3ZlZFxuICAgKi9cbiAgcmVtb3ZlRmllbGQoZmllbGRJRCkge1xuICAgIGxldCBmaWVsZFJlbW92ZWQgPSBmYWxzZTtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmQuc3RhZ2U7XG4gICAgY29uc3QgZmllbGRzID0gZm9ybS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmb3JtLWZpZWxkJyk7XG5cbiAgICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gZmllbGRzIHRvIHJlbW92ZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghZmllbGRJRCkge1xuICAgICAgbGV0IGF2YWlsYWJsZUlkcyA9IFtdLnNsaWNlLmNhbGwoZmllbGRzKS5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5pZDtcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS53YXJuKCdmaWVsZElEIHJlcXVpcmVkIHRvIHJlbW92ZSBzcGVjaWZpYyBmaWVsZHMuIFJlbW92aW5nIGxhc3QgZmllbGQgc2luY2Ugbm8gSUQgd2FzIHN1cHBsaWVkLicpO1xuICAgICAgY29uc29sZS53YXJuKCdBdmFpbGFibGUgSURzOiAnICsgYXZhaWxhYmxlSWRzLmpvaW4oJywgJykpO1xuICAgICAgZmllbGRJRCA9IGZvcm0ubGFzdENoaWxkLmlkO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRJRCk7XG4gICAgY29uc3QgJGZpZWxkID0gJChmaWVsZCk7XG4gICAgaWYgKCFmaWVsZCkge1xuICAgICAgY29uc29sZS53YXJuKCdGaWVsZCBub3QgZm91bmQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAkZmllbGQuc2xpZGVVcCgyNTAsIGZ1bmN0aW9uKCkge1xuICAgICAgJGZpZWxkLnJlbW92ZUNsYXNzKCdkZWxldGluZycpO1xuICAgICAgJGZpZWxkLnJlbW92ZSgpO1xuICAgICAgZmllbGRSZW1vdmVkID0gdHJ1ZTtcbiAgICAgIF90aGlzLnNhdmUoKTtcbiAgICAgIGlmICghZm9ybS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICBsZXQgc3RhZ2VXcmFwID0gZm9ybS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LmFkZCgnZW1wdHknKTtcbiAgICAgICAgc3RhZ2VXcmFwLmRhdGFzZXQuY29udGVudCA9IG1pMThuLmN1cnJlbnQuZ2V0U3RhcnRlZDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnRzLmZpZWxkUmVtb3ZlZCk7XG4gICAgcmV0dXJuIGZpZWxkUmVtb3ZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBtYXJrdXAgZm9yIGZvcm0gYWN0aW9uIGJ1dHRvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBidXR0b25EYXRhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRE9NIGVsZW1lbnQgZm9yIGFjdGlvbiBidXR0b25cbiAgICovXG4gIHByb2Nlc3NBY3Rpb25CdXR0b25zKGJ1dHRvbkRhdGEpIHtcbiAgICBsZXQge2xhYmVsLCBldmVudHMsIC4uLmF0dHJzfSA9IGJ1dHRvbkRhdGE7XG4gICAgbGV0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgaWYgKCFsYWJlbCkge1xuICAgICAgaWYgKGF0dHJzLmlkKSB7XG4gICAgICAgIGxhYmVsID0gbWkxOG4uY3VycmVudFthdHRycy5pZF0gfHwgdXRpbHMuY2FwaXRhbGl6ZShhdHRycy5pZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYWJlbCA9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsYWJlbCA9IG1pMThuLmN1cnJlbnRbbGFiZWxdIHx8ICcnO1xuICAgIH1cblxuICAgIGlmICghYXR0cnMuaWQpIHtcbiAgICAgIGF0dHJzLmlkID0gYCR7ZGF0YS5mb3JtSUR9LWFjdGlvbi0ke01hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxMDAwKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRycy5pZCA9IGAke2RhdGEuZm9ybUlEfS0ke2F0dHJzLmlkfS1hY3Rpb25gO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1dHRvbiA9IG0oJ2J1dHRvbicsIGxhYmVsLCBhdHRycyk7XG5cbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBmb3IgKGxldCBldmVudCBpbiBldmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcbiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZXZ0ID0+IGV2ZW50c1tldmVudF0oZXZ0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYnV0dG9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENyb3NzIGxpbmsgc3VidHlwZXMgYW5kIGRlZmluZSBtYXJrdXAgY29uZmlnXG4gICAqIEBwYXJhbSAge0FycmF5fSBzdWJ0eXBlT3B0c1xuICAgKiBAcmV0dXJuIHtBcnJheX0gc3VidHlwZXNcbiAgICovXG4gIHByb2Nlc3NTdWJ0eXBlcyhzdWJ0eXBlT3B0cykge1xuICAgIGxldCBzdWJ0eXBlcyA9IHt9O1xuICAgIGNvbnN0IHN1YnR5cGVGb3JtYXQgPSBzdWJ0eXBlID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbDogbWkxOG4uZ2V0KHN1YnR5cGUpLFxuICAgICAgICAgIHZhbHVlOiBzdWJ0eXBlXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBjb25maWcuc3VidHlwZXMgPSB1dGlscy5tZXJnZShkZWZhdWx0U3VidHlwZXMsIHN1YnR5cGVPcHRzKTtcblxuICAgICAgZm9yIChsZXQgc3VidHlwZSBpbiBjb25maWcuc3VidHlwZXMpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5zdWJ0eXBlcy5oYXNPd25Qcm9wZXJ0eShzdWJ0eXBlKSkge1xuICAgICAgICAgIHN1YnR5cGVzW3N1YnR5cGVdID0gY29uZmlnLnN1YnR5cGVzW3N1YnR5cGVdLm1hcChzdWJ0eXBlRm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VidHlwZXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgc3RhZ2UgYW5kIGNvbnRyb2xzIGRvbSBlbGVtZW50c1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGZvcm1JRCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBlZGl0b3JVSShmb3JtSUQpIHtcbiAgICBsZXQgZCA9IHRoaXMuZDtcbiAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBkLnN0YWdlID0gbSgndWwnLCBudWxsLCB7XG4gICAgICAgIGlkOiBkYXRhLmZvcm1JRCxcbiAgICAgICAgY2xhc3NOYW1lOiAnZnJtYidcbiAgICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGRyYWdnYWJsZSBmaWVsZHMgZm9yIGZvcm1CdWlsZGVyXG4gICAgZC5jb250cm9scyA9IG0oJ3VsJywgbnVsbCwge1xuICAgICAgaWQ6IGAke2RhdGEuZm9ybUlEfS1jb250cm9sLWJveGAsXG4gICAgICBjbGFzc05hbWU6ICdmcm1iLWNvbnRyb2wnXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB1c2VyIG9wdGlvbnMgZm9yIGFjdGlvbkJ1dHRvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge09iamVjdH0gcHJvY2Vzc2VkT3B0aW9uc1xuICAgKi9cbiAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICBsZXQge2ZpZWxkcyA9IFtdLCB0ZW1wbGF0ZXMsIC4uLm9wdHN9ID0gb3B0aW9ucztcbiAgICBsZXQgYWN0aW9uQnV0dG9ucyA9IFt7XG4gICAgICBpZDogJ2NsZWFyJyxcbiAgICAgIGNsYXNzTmFtZTogJ2NsZWFyLWFsbCBidG4gYnRuLWRhbmdlcicsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2s6IF90aGlzLmNvbmZpcm1SZW1vdmVBbGwuYmluZChfdGhpcylcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBsYWJlbDogJ3ZpZXdKU09OJyxcbiAgICAgIGlkOiAnZGF0YScsXG4gICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRlZmF1bHQnLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrOiBfdGhpcy5zaG93RGF0YS5iaW5kKF90aGlzKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGlkOiAnc2F2ZScsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tcHJpbWFyeSBzYXZlLXRlbXBsYXRlJyxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljazogZXZ0ID0+IHtcbiAgICAgICAgICBfdGhpcy5zYXZlKCk7XG4gICAgICAgICAgY29uZmlnLm9wdHMub25TYXZlKGV2dCwgX3RoaXMuZGF0YS5mb3JtRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XTtcblxuICAgIGxldCBkZWZhdWx0RmllbGRzID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogbWkxOG4uZ2V0KCdhdXRvY29tcGxldGUnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAnYXV0b2NvbXBsZXRlJ1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2J1dHRvbicpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2NoZWNrYm94R3JvdXAnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAnY2hlY2tib3gtZ3JvdXAnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2RhdGVGaWVsZCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogbWkxOG4uZ2V0KCdmaWxlVXBsb2FkJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2hlYWRlcicpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdoZWFkZXInLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2hpZGRlbicpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ251bWJlcicpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ3BhcmFncmFwaCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ3JhZGlvR3JvdXAnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAncmFkaW8tZ3JvdXAnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ3NlbGVjdCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ3RleHQnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgndGV4dEFyZWEnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuXG4gICAgb3B0cy5maWVsZHMgPSBmaWVsZHMuY29uY2F0KGRlZmF1bHRGaWVsZHMpO1xuICAgIGNvbmZpZy5vcHRzID0gT2JqZWN0LmFzc2lnbih7fSwge2FjdGlvbkJ1dHRvbnMsIHRlbXBsYXRlcywgZmllbGRzfSwgb3B0cyk7XG4gICAgbGV0IHVzZXJUZW1wbGF0ZXMgPSBPYmplY3Qua2V5cyhjb25maWcub3B0cy50ZW1wbGF0ZXMpLm1hcChrZXkgPT4ge1xuICAgICAgcmV0dXJuIFtrZXksIGNvbmZpZy5vcHRzLnRlbXBsYXRlc1trZXldXTtcbiAgICB9KTtcbiAgICB1dGlscy50ZW1wbGF0ZXMgPSB1dGlscy50ZW1wbGF0ZXMuY29uY2F0KHVzZXJUZW1wbGF0ZXMpO1xuXG4gICAgcmV0dXJuIGNvbmZpZy5vcHRzO1xuICB9XG5cblxuICAvLyBlbmQgY2xhc3Ncbn1cblxuLy8gZXhwb3J0IGRlZmF1bHQgSGVscGVycztcbiIsIi8qKlxuICogUG9seWZpbGxzIGZvciBvbGRlciBicm93c2VycyBhbmQgYWRkZWQgZnVuY3Rpb25hbGl0eVxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcG9seWZpbGxzKCkge1xuICAvLyBFbGVtZW50LnJlbW92ZSgpIHBvbHlmaWxsXG4gIGlmICghKCdyZW1vdmUnIGluIEVsZW1lbnQucHJvdG90eXBlKSkge1xuICAgIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSkge1xuICAgICAgICB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIEV2ZW50IHBvbHlmaWxsXG4gIGlmICh0eXBlb2YgRXZlbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB3aW5kb3cuRXZlbnQgPSBmdW5jdGlvbihldnQpIHtcbiAgICAgICAgbGV0IGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICAgIGV2ZW50LmluaXRFdmVudChldnQsIHRydWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9O1xuICAgIH0pKCk7XG4gIH1cblxuICAvLyBPYmplY3QuYXNzaWduIHBvbHlmaWxsXG4gIGlmICh0eXBlb2YgT2JqZWN0LmFzc2lnbiAhPSAnZnVuY3Rpb24nKSB7XG4gICAgT2JqZWN0LmFzc2lnbiA9IGZ1bmN0aW9uKHRhcmdldCkge1xuICAgICAgJ3VzZSBzdHJpY3QnO1xuICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgICAgfVxuXG4gICAgICB0YXJnZXQgPSBPYmplY3QodGFyZ2V0KTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGxldCBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICBpZiAoc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xuICB9XG5cblxuICAvLyBSZWZlcmVuY2U6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuNC40LjE4XG4gIGlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICBsZXQgVCwgaztcbiAgICAgIGlmICh0aGlzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgIGxldCBsZW4gPSBPLmxlbmd0aCA+Pj4gMDtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBUID0gYXJndW1lbnRzWzFdO1xuICAgICAgfVxuICAgICAgayA9IDA7XG4gICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICBsZXQga1ZhbHVlO1xuICAgICAgICBpZiAoayBpbiBPKSB7XG4gICAgICAgICAga1ZhbHVlID0gT1trXTtcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgIH1cbiAgICAgICAgaysrO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcG9seWZpbGxzKCk7XG4iLCJpbXBvcnQge2RlZmF1bHRTdWJ0eXBlcywgZmlsdGVyfSBmcm9tICcuL2RvbSc7XG5cbi8qKlxuICogQ3Jvc3MgZmlsZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBhcnJheXMsXG4gKiBzb3J0aW5nIGFuZCBvdGhlciBmdW4gc3R1ZmZcbiAqIEByZXR1cm4ge09iamVjdH0gdXRpbHNcbiAqL1xuLy8gZnVuY3Rpb24gdXRpbHMoKSB7XG4gIGNvbnN0IHV0aWxzID0ge307XG4gIHdpbmRvdy5mYkxvYWRlZCA9IHtcbiAgICBqczogW10sXG4gICAgY3NzOiBbXVxuICB9O1xuICB3aW5kb3cuZmJFZGl0b3JzID0ge1xuICAgIHF1aWxsOiB7fSxcbiAgICB0aW55bWNlOiB7fVxuICB9O1xuXG4gIC8vIGNsZWFuZXIgc3ludGF4IGZvciB0ZXN0aW5nIGluZGV4T2YgZWxlbWVudFxuICB1dGlscy5pbkFycmF5ID0gZnVuY3Rpb24obmVlZGxlLCBoYXlzdGFjaykge1xuICAgIHJldHVybiBoYXlzdGFjay5pbmRleE9mKG5lZWRsZSkgIT09IC0xO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXR0cnMge2F0dHJOYW1lOiBhdHRyVmFsdWV9XG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgT2JqZWN0IHRyaW1tZWQgb2YgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzXG4gICAqL1xuICB1dGlscy50cmltT2JqID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBsZXQgeG1sUmVtb3ZlID0gW1xuICAgICAgbnVsbCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgICcnLFxuICAgICAgZmFsc2UsXG4gICAgICAnZmFsc2UnXG4gICAgXTtcbiAgICBmb3IgKGxldCBhdHRyIGluIGF0dHJzKSB7XG4gICAgICBpZiAodXRpbHMuaW5BcnJheShhdHRyc1thdHRyXSwgeG1sUmVtb3ZlKSkge1xuICAgICAgICBkZWxldGUgYXR0cnNbYXR0cl07XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXR0cnNbYXR0cl0pKSB7XG4gICAgICAgIGlmICghYXR0cnNbYXR0cl0ubGVuZ3RoKSB7XG4gICAgICAgICAgZGVsZXRlIGF0dHJzW2F0dHJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUZXN0IGlmIGF0dHJpYnV0ZSBpcyBhIHZhbGlkIEhUTUwgYXR0cmlidXRlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXR0clxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgdXRpbHMudmFsaWRBdHRyID0gZnVuY3Rpb24oYXR0cikge1xuICAgIGxldCBpbnZhbGlkID0gW1xuICAgICAgJ3ZhbHVlcycsXG4gICAgICAnZW5hYmxlT3RoZXInLFxuICAgICAgJ290aGVyJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAvLyAnc3R5bGUnLFxuICAgICAgJ3N1YnR5cGUnXG4gICAgXTtcbiAgICByZXR1cm4gIXV0aWxzLmluQXJyYXkoYXR0ciwgaW52YWxpZCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gYXR0cnMgb2JqZWN0IGludG8gYSBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhdHRycyBvYmplY3Qgb2YgYXR0cmlidXRlcyBmb3IgbWFya3VwXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHV0aWxzLmF0dHJTdHJpbmcgPSBmdW5jdGlvbihhdHRycykge1xuICAgIGxldCBhdHRyaWJ1dGVzID0gW107XG5cbiAgICBmb3IgKGxldCBhdHRyIGluIGF0dHJzKSB7XG4gICAgICBpZiAoYXR0cnMuaGFzT3duUHJvcGVydHkoYXR0cikgJiYgdXRpbHMudmFsaWRBdHRyKGF0dHIpKSB7XG4gICAgICAgIGF0dHIgPSB1dGlscy5zYWZlQXR0cihhdHRyLCBhdHRyc1thdHRyXSk7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChhdHRyLm5hbWUgKyBhdHRyLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuam9pbignICcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGF0dHJpYnV0ZXMgdG8gbWFya3VwIHNhZmUgc3RyaW5nc1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWUgIGF0dHJpYnV0ZSBuYW1lXG4gICAqIEBwYXJhbSAge1N0cmluZ30gdmFsdWUgYXR0cmlidXRlIHZhbHVlXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAge2F0dHJOYW1lOiBhdHRyVmFsdWV9XG4gICAqL1xuICB1dGlscy5zYWZlQXR0ciA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IHV0aWxzLnNhZmVBdHRyTmFtZShuYW1lKTtcbiAgICBsZXQgdmFsU3RyaW5nO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsU3RyaW5nID0gdXRpbHMuZXNjYXBlQXR0cih2YWx1ZS5qb2luKCcgJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICdib29sZWFuJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxTdHJpbmcgPSB1dGlscy5lc2NhcGVBdHRyKHZhbHVlLnJlcGxhY2UoJywnLCAnICcpLnRyaW0oKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA/IGA9XCIke3ZhbFN0cmluZ31cImAgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlXG4gICAgfTtcbiAgfTtcblxuICB1dGlscy5zYWZlQXR0ck5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbGV0IHNhZmVBdHRyID0ge1xuICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnXG4gICAgfTtcblxuICAgIHJldHVybiBzYWZlQXR0cltuYW1lXSB8fCB1dGlscy5oeXBoZW5DYXNlKG5hbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHN0cmluZ3MgaW50byBsb3dlcmNhc2UtaHlwaGVuXG4gICAqXG4gICAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICovXG4gIHV0aWxzLmh5cGhlbkNhc2UgPSAoc3RyKSA9PiB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1teXFx3XFxzXFwtXS9naSwgJycpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uKCQxKSB7XG4gICAgICByZXR1cm4gJy0nICsgJDEudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFxzL2csICctJykucmVwbGFjZSgvXi0rL2csICcnKTtcbiAgfTtcblxuICAvKipcbiAgICogY29udmVydCBhIGh5cGhlbmF0ZWQgc3RyaW5nIHRvIGNhbWVsQ2FzZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHN0clxuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqL1xuICB1dGlscy5jYW1lbENhc2UgPSBzdHIgPT4gc3RyLnJlcGxhY2UoLy0oW2Etel0pL2csIChtLCB3KSA9PlxuICAgIHcudG9VcHBlckNhc2UoKSk7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBjb250ZW50IHR5cGVcbiAgICogQHBhcmFtICB7Tm9kZSB8IFN0cmluZyB8IEFycmF5IHwgT2JqZWN0fSBjb250ZW50XG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGUgZm9yIG1hcHBpbmdcbiAgICovXG4gIHV0aWxzLmNvbnRlbnRUeXBlID0gY29udGVudCA9PiB7XG4gICAgbGV0IHR5cGUgPSB0eXBlb2YgY29udGVudDtcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIE5vZGUgfHwgY29udGVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICB0eXBlID0gJ25vZGUnO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb250ZW50KSkge1xuICAgICAgdHlwZSA9ICdhcnJheSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIEJpbmQgZXZlbnRzIHRvIGFuIGVsZW1lbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBlbGVtZW50IERPTSBlbGVtZW50XG4gICAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRzICBvYmplY3QgZnVsbCBvZiBldmVudHMgZWcuIHtjbGljazogZXZ0ID0+IGNhbGxiYWNrfVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgdXRpbHMuYmluZEV2ZW50cyA9IChlbGVtZW50LCBldmVudHMpID0+IHtcbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBmb3IgKGxldCBldmVudCBpbiBldmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcbiAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGV2dCA9PiBldmVudHNbZXZlbnRdKGV2dCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgYXR0cmlidXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgIG5hbWVcbiAqL1xuICB1dGlscy5uYW1lQXR0ciA9IGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgbGV0IGVwb2NoID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgbGV0IHByZWZpeCA9IGZpZWxkLnR5cGUgfHwgdXRpbHMuaHlwaGVuQ2FzZShmaWVsZC5sYWJlbCk7XG4gICAgcmV0dXJuIHByZWZpeCArICctJyArIGVwb2NoO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBtYXJrdXAgd3JhcHBlciB3aGVyZSBuZWVkZWRcbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICAgdGFnXG4gICAqIEBwYXJhbSAge1N0cmluZ3xBcnJheXxPYmplY3R9IGNvbnRlbnQgd2Ugd3JhcCB0aGlzXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgICAgICAgIGF0dHJzXG4gICAqIEByZXR1cm4ge09iamVjdH0gRE9NIEVsZW1lbnRcbiAgICovXG4gIHV0aWxzLm1hcmt1cCA9IGZ1bmN0aW9uKHRhZywgY29udGVudCA9ICcnLCBhdHRyaWJ1dGVzID0ge30pIHtcbiAgICBsZXQgY29udGVudFR5cGUgPSB1dGlscy5jb250ZW50VHlwZShjb250ZW50KTtcbiAgICBsZXQge2V2ZW50cywgLi4uYXR0cnN9ID0gYXR0cmlidXRlcztcbiAgICBjb25zdCBmaWVsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcblxuICAgIGNvbnN0IGFwcGVuZENvbnRlbnQgPSB7XG4gICAgICBzdHJpbmc6IChjb250ZW50KSA9PiB7XG4gICAgICAgIGZpZWxkLmlubmVySFRNTCArPSBjb250ZW50O1xuICAgICAgfSxcbiAgICAgIG9iamVjdDogKGNvbmZpZykgPT4ge1xuICAgICAgICBsZXQge3RhZywgY29udGVudCwgLi4uZGF0YX0gPSBjb25maWc7XG4gICAgICAgIHJldHVybiBmaWVsZC5hcHBlbmRDaGlsZCh1dGlscy5tYXJrdXAodGFnLCBjb250ZW50LCBkYXRhKSk7XG4gICAgICB9LFxuICAgICAgbm9kZTogKGNvbnRlbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgICAgfSxcbiAgICAgIGFycmF5OiAoY29udGVudCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb250ZW50VHlwZSA9IHV0aWxzLmNvbnRlbnRUeXBlKGNvbnRlbnRbaV0pO1xuICAgICAgICAgIGFwcGVuZENvbnRlbnRbY29udGVudFR5cGVdKGNvbnRlbnRbaV0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb246IGNvbnRlbnQgPT4ge1xuICAgICAgICBjb250ZW50ID0gY29udGVudCgpO1xuICAgICAgICBjb250ZW50VHlwZSA9IHV0aWxzLmNvbnRlbnRUeXBlKGNvbnRlbnQpO1xuICAgICAgICBhcHBlbmRDb250ZW50W2NvbnRlbnRUeXBlXShjb250ZW50KTtcbiAgICAgIH0sXG4gICAgICB1bmRlZmluZWQ6ICgpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcih0YWcsIGNvbnRlbnQsIGF0dHJpYnV0ZXMpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgYXR0ciBpbiBhdHRycykge1xuICAgICAgaWYgKGF0dHJzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICAgIGxldCBuYW1lID0gdXRpbHMuc2FmZUF0dHJOYW1lKGF0dHIpO1xuICAgICAgICBmaWVsZC5zZXRBdHRyaWJ1dGUobmFtZSwgYXR0cnNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50KSB7XG4gICAgICBhcHBlbmRDb250ZW50W2NvbnRlbnRUeXBlXS5jYWxsKHRoaXMsIGNvbnRlbnQpO1xuICAgIH1cblxuICAgIHV0aWxzLmJpbmRFdmVudHMoZmllbGQsIGV2ZW50cyk7XG5cbiAgICByZXR1cm4gZmllbGQ7XG4gIH07XG4gIGNvbnN0IG0gPSB1dGlscy5tYXJrdXA7XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgaHRtbCBlbGVtZW50IGF0dHJpYnV0ZXMgdG8ga2V5L3ZhbHVlIG9iamVjdFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGVsZW0gRE9NIGVsZW1lbnRcbiAgICogQHJldHVybiB7T2JqZWN0fSBleDoge2F0dHJOYW1lOiBhdHRyVmFsdWV9XG4gICAqL1xuICB1dGlscy5wYXJzZUF0dHJzID0gZnVuY3Rpb24oZWxlbSkge1xuICAgIGxldCBhdHRycyA9IGVsZW0uYXR0cmlidXRlcztcbiAgICBsZXQgZGF0YSA9IHt9O1xuICAgIHV0aWxzLmZvckVhY2goYXR0cnMsIGF0dHIgPT4ge1xuICAgICAgbGV0IGF0dHJWYWwgPSBhdHRyc1thdHRyXS52YWx1ZTtcbiAgICAgIGlmIChhdHRyVmFsLm1hdGNoKC9mYWxzZXx0cnVlL2cpKSB7XG4gICAgICAgIGF0dHJWYWwgPSAoYXR0clZhbCA9PT0gJ3RydWUnKTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0clZhbC5tYXRjaCgvdW5kZWZpbmVkL2cpKSB7XG4gICAgICAgIGF0dHJWYWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRyVmFsKSB7XG4gICAgICAgIGRhdGFbYXR0cnNbYXR0cl0ubmFtZV0gPSBhdHRyVmFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgZmllbGQgb3B0aW9ucyB0byBvcHRpb25EYXRhXG4gICAqIEBwYXJhbSAge05vZGVMaXN0fSBvcHRpb25zICBET00gZWxlbWVudHNcbiAgICogQHJldHVybiB7QXJyYXl9IG9wdGlvbkRhdGEgYXJyYXlcbiAgICovXG4gIHV0aWxzLnBhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBsZXQgb3B0aW9uRGF0YSA9IHt9O1xuICAgIGxldCBkYXRhID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9wdGlvbkRhdGEgPSB1dGlscy5wYXJzZUF0dHJzKG9wdGlvbnNbaV0pO1xuICAgICAgb3B0aW9uRGF0YS5sYWJlbCA9IG9wdGlvbnNbaV0udGV4dENvbnRlbnQ7XG4gICAgICBkYXRhLnB1c2gob3B0aW9uRGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIFhNTCBmb3JtRGF0YVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHhtbFN0cmluZ1xuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgICAgICBmb3JtRGF0YSBhcnJheVxuICAgKi9cbiAgdXRpbHMucGFyc2VYTUwgPSBmdW5jdGlvbih4bWxTdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuICAgIGxldCB4bWwgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgJ3RleHQveG1sJyk7XG4gICAgbGV0IGZvcm1EYXRhID0gW107XG5cbiAgICBpZiAoeG1sKSB7XG4gICAgICBsZXQgZmllbGRzID0geG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmaWVsZCcpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGZpZWxkRGF0YSA9IHV0aWxzLnBhcnNlQXR0cnMoZmllbGRzW2ldKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3B0aW9uJyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBmaWVsZERhdGEudmFsdWVzID0gdXRpbHMucGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybURhdGEucHVzaChmaWVsZERhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydHMgZXNjYXBlZCBIVE1MIGludG8gdXNhYmxlIEhUTUxcbiAgICogQHBhcmFtICB7U3RyaW5nfSBodG1sIGVzY2FwZWQgSFRNTFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgcGFyc2VkIEhUTUxcbiAgICovXG4gIHV0aWxzLnBhcnNlZEh0bWwgPSBmdW5jdGlvbihodG1sKSB7XG4gICAgbGV0IGVzY2FwZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGVzY2FwZUVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZXNjYXBlRWxlbWVudC50ZXh0Q29udGVudDtcbiAgfTtcblxuICAvKipcbiAgICogRXNjYXBlIG1hcmt1cCBzbyBpdCBjYW4gYmUgZGlzcGxheWVkIHJhdGhlciB0aGFuIHJlbmRlcmVkXG4gICAqIEBwYXJhbSAge1N0cmluZ30gaHRtbCBtYXJrdXBcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgIGVzY2FwZWQgaHRtbFxuICAgKi9cbiAgdXRpbHMuZXNjYXBlSHRtbCA9IGZ1bmN0aW9uKGh0bWwpIHtcbiAgICBsZXQgZXNjYXBlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgZXNjYXBlRWxlbWVudC50ZXh0Q29udGVudCA9IGh0bWw7XG4gICAgcmV0dXJuIGVzY2FwZUVsZW1lbnQuaW5uZXJIVE1MO1xuICB9O1xuXG4gIC8vIEVzY2FwZSBhbiBhdHRyaWJ1dGVcbiAgdXRpbHMuZXNjYXBlQXR0ciA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGxldCBtYXRjaCA9IHtcbiAgICAgICdcIic6ICcmcXVvdDsnLFxuICAgICAgJyYnOiAnJmFtcDsnLFxuICAgICAgJzwnOiAnJmx0OycsXG4gICAgICAnPic6ICcmZ3Q7J1xuICAgIH07XG5cbiAgICBjb25zdCByZXBsYWNlVGFnID0gdGFnID0+IG1hdGNoW3RhZ10gfHwgdGFnO1xuXG4gICAgcmV0dXJuICh0eXBlb2Ygc3RyID09PSAnc3RyaW5nJykgPyBzdHIucmVwbGFjZSgvW1wiJjw+XS9nLCByZXBsYWNlVGFnKSA6IHN0cjtcbiAgfTtcblxuICAvLyBFc2NhcGUgYXR0cmlidXRlc1xuICB1dGlscy5lc2NhcGVBdHRycyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgZm9yIChsZXQgYXR0ciBpbiBhdHRycykge1xuICAgICAgaWYgKGF0dHJzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICAgIGF0dHJzW2F0dHJdID0gdXRpbHMuZXNjYXBlQXR0cihhdHRyc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJzO1xuICB9O1xuXG4gIC8vIGZvckVhY2ggdGhhdCBjYW4gYmUgdXNlZCBvbiBub2RlTGlzdFxuICB1dGlscy5mb3JFYWNoID0gZnVuY3Rpb24oYXJyYXksIGNhbGxiYWNrLCBzY29wZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwoc2NvcGUsIGksIGFycmF5W2ldKTsgLy8gcGFzc2VzIGJhY2sgc3R1ZmYgd2UgbmVlZFxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSBhbiBhcnJheSBvZiBlbGVtZW50c1xuICAgKiBAcGFyYW0gIHtBcnJheX0gYXJyYXkgIGFycmF5IHdpdGggcG9zc2libGUgZHVwbGljYXRlc1xuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgIGFycmF5IHdpdGggb25seSB1bmlxdWUgdmFsdWVzXG4gICAqL1xuICB1dGlscy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5maWx0ZXIoKGVsZW0sIHBvcywgYXJyKSA9PiB7XG4gICAgICByZXR1cm4gYXJyLmluZGV4T2YoZWxlbSkgPT09IHBvcztcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gYW4gYXJyYXlcbiAgICogQHBhcmFtICB7QXJyYXl9IGFyclxuICAgKiBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAgICovXG4gIHV0aWxzLnJlbW92ZSA9ICh2YWwsIGFycikgPT4ge1xuICAgIGxldCBpbmRleCA9IGFyci5pbmRleE9mKHZhbCk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuXG4gIHV0aWxzLm1ha2VMYWJlbCA9IGZpZWxkRGF0YSA9PiB7XG4gICAgbGV0IHtsYWJlbCA9ICcnLCBkZXNjcmlwdGlvbiA9ICcnLCAuLi5hdHRyc30gPSBmaWVsZERhdGE7XG4gICAgbGV0IGxhYmVsVGV4dCA9IHV0aWxzLnBhcnNlZEh0bWwobGFiZWwpO1xuICAgIGxldCBsYWJlbENvbnRlbnRzID0gW2xhYmVsVGV4dF07XG5cbiAgICBpZiAoYXR0cnMucmVxdWlyZWQpIHtcbiAgICAgIGxhYmVsQ29udGVudHMucHVzaChtKCdzcGFuJywgJyAqJywge2NsYXNzTmFtZTogJ2ZiLXJlcXVpcmVkJ30pKTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cnMudHlwZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgICBsYWJlbENvbnRlbnRzLnB1c2gobSgnc3BhbicsICc/Jywge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3Rvb2x0aXAtZWxlbWVudCcsXG4gICAgICAgICAgdG9vbHRpcDogZGVzY3JpcHRpb25cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsYWJlbEF0dHJzID0ge1xuICAgICAgY2xhc3NOYW1lOiBgZmItJHthdHRycy50eXBlfS1sYWJlbGBcbiAgICB9O1xuXG4gICAgaWYgKGF0dHJzLmlkKSB7XG4gICAgICBsYWJlbEF0dHJzLmZvciA9IGF0dHJzLmlkO1xuICAgIH1cblxuICAgIHJldHVybiBtKCdsYWJlbCcsIGxhYmVsQ29udGVudHMsIGxhYmVsQXR0cnMpO1xuICB9O1xuXG4gIHV0aWxzLnRlbXBsYXRlTWFwID0gdHlwZSA9PiB7XG4gICAgbGV0IHRlbXBsYXRlO1xuICAgIGxldCB0ZW1wbGF0ZXMgPSB1dGlscy50ZW1wbGF0ZXM7XG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHRlbXBsYXRlcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgICBpZih1dGlscy5pbkFycmF5KHR5cGUsIGtleSkpIHtcbiAgICAgICAgICB0ZW1wbGF0ZSA9IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IGtleSkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgdXRpbHMuYXV0b2NvbXBsZXRlVGVtcGxhdGUgPSBmaWVsZERhdGEgPT4ge1xuICAgIGxldCB7dmFsdWVzLCB0eXBlLCAuLi5kYXRhfSA9IGZpZWxkRGF0YTtcbiAgICBjb25zdCBrZXlib2FyZE5hdiA9IChlKSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gZS50YXJnZXQubmV4dFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICBsZXQgYWN0aXZlT3B0aW9uID0gbGlzdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhY3RpdmUtb3B0aW9uJylbMF07XG4gICAgICBjb25zdCBrZXlDb2RlTWFwVmFscyA9IFtcbiAgICAgICAgLy8gdXBcbiAgICAgICAgWzM4LCAoKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbi5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZS1vcHRpb24nKTtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uID0gYWN0aXZlT3B0aW9uLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZS1vcHRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1dLFxuICAgICAgICAvLyBkb3duXG4gICAgICAgIFs0MCwgKCkgPT4ge1xuICAgICAgICAgIGlmIChhY3RpdmVPcHRpb24pIHtcbiAgICAgICAgICAgIGlmIChhY3RpdmVPcHRpb24ubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZS1vcHRpb24nKTtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uID0gYWN0aXZlT3B0aW9uLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlLW9wdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb24gPSBsaXN0LmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlLW9wdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfV0sXG4gICAgICAgIFsxMywgKCkgPT4ge1xuICAgICAgICAgIGlmIChhY3RpdmVPcHRpb24pIHtcbiAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gYWN0aXZlT3B0aW9uLmlubmVySFRNTDtcbiAgICAgICAgICAgIGlmIChsaXN0LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICBsaXN0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGlzdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfV1cbiAgICAgIF07XG4gICAgICBsZXQga2V5Q29kZU1hcCA9IG5ldyBNYXAoa2V5Q29kZU1hcFZhbHMpO1xuXG4gICAgICBsZXQgZGlyZWN0aW9uID0ga2V5Q29kZU1hcC5nZXQoZS5rZXlDb2RlKTtcbiAgICAgIGlmKCFkaXJlY3Rpb24pIHtcbiAgICAgICAgZGlyZWN0aW9uID0gKCkgPT4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaXJlY3Rpb24oKTtcbiAgICB9O1xuICAgIGNvbnN0IGZhdXhFdmVudHMgPSB7XG4gICAgICBmb2N1czogZXZ0ID0+IHtcbiAgICAgICAgbGV0IGxpc3QgPSBldnQudGFyZ2V0Lm5leHRTaWJsaW5nLm5leHRTaWJsaW5nO1xuICAgICAgICBldnQudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlib2FyZE5hdik7XG4gICAgICAgIGxpc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGxpc3Quc3R5bGUud2lkdGggPSBsaXN0LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xuICAgICAgfSxcbiAgICAgIGJsdXI6IGV2dCA9PiB7XG4gICAgICAgIGV2dC50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWJvYXJkTmF2KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZXZ0LnRhcmdldC5uZXh0U2libGluZy5uZXh0U2libGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9LCAyMDApO1xuICAgICAgfSxcbiAgICAgIGlucHV0OiAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBldnQudGFyZ2V0Lm5leHRTaWJsaW5nLm5leHRTaWJsaW5nO1xuICAgICAgICBmaWx0ZXIobGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpLCBldnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgaWYgKCFldnQudGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgbGlzdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGxldCBmYXV4QXR0cnMgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhLFxuICAgICAge1xuICAgICAgICBpZDogYCR7ZGF0YS5pZH0taW5wdXRgLFxuICAgICAgICBldmVudHM6IGZhdXhFdmVudHNcbiAgICAgIH0pO1xuICAgIGxldCBoaWRkZW5BdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEsIHt0eXBlOiAnaGlkZGVuJ30pO1xuICAgIGRlbGV0ZSBmYXV4QXR0cnMubmFtZTtcbiAgICBjb25zdCBmaWVsZCA9IFtcbiAgICAgIG0oJ2lucHV0JywgbnVsbCwgZmF1eEF0dHJzKSxcbiAgICAgIG0oJ2lucHV0JywgbnVsbCwgaGlkZGVuQXR0cnMpXG4gICAgXTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB2YWx1ZXMubWFwKG9wdGlvbkRhdGEgPT4ge1xuICAgICAgbGV0IGxhYmVsID0gb3B0aW9uRGF0YS5sYWJlbDtcbiAgICAgIGxldCBjb25maWcgPSB7XG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrOiBldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGV2dC50YXJnZXQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGlzdC5wcmV2aW91c1NpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgZmllbGQudmFsdWUgPSBvcHRpb25EYXRhLmxhYmVsO1xuICAgICAgICAgICAgZmllbGQucHJldmlvdXNTaWJsaW5nLnZhbHVlID0gb3B0aW9uRGF0YS52YWx1ZTtcbiAgICAgICAgICAgIGxpc3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiBvcHRpb25EYXRhLnZhbHVlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG0oJ2xpJywgbGFiZWwsIGNvbmZpZyk7XG4gICAgfSk7XG5cbiAgICBmaWVsZC5wdXNoKG0oJ3VsJywgb3B0aW9ucyxcbiAgICAgIHtpZDogYCR7ZGF0YS5pZH0tbGlzdGAsIGNsYXNzTmFtZTogYGZiLSR7dHlwZX0tbGlzdGB9KSk7XG5cbiAgICBjb25zdCBvblJlbmRlciA9IChldnQpID0+IHtcblxuICAgIH07XG5cbiAgICByZXR1cm4ge2ZpZWxkLCBvblJlbmRlcn07XG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIERPTSBlbGVtZW50cyBmb3Igc2VsZWN0LCBjaGVja2JveC1ncm91cCBhbmQgcmFkaW8tZ3JvdXAuXG4gICAqIEBwYXJhbSAge09iamVjdH0gZmllbGREYXRhXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgIERPTSBlbGVtZW50c1xuICAgKi9cbiAgdXRpbHMuc2VsZWN0VGVtcGxhdGUgPSAoZmllbGREYXRhLCBpc1ByZXZpZXcpID0+IHtcbiAgICBsZXQgb3B0aW9ucyA9IFtdO1xuICAgIGxldCB7dmFsdWVzLCB0eXBlLCBpbmxpbmUsIG90aGVyLCB0b2dnbGUsIC4uLmRhdGF9ID0gZmllbGREYXRhO1xuICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhkYXRhLCBpc1ByZXZpZXcpO1xuICAgIGxldCBvcHRpb25UeXBlID0gdHlwZS5yZXBsYWNlKCctZ3JvdXAnLCAnJyk7XG4gICAgbGV0IGlzU2VsZWN0ID0gdHlwZSA9PT0gJ3NlbGVjdCc7XG5cbiAgICBpZiAodmFsdWVzKSB7XG4gICAgICBpZiAoYXR0cnMucGxhY2Vob2xkZXIgJiYgaXNTZWxlY3QpIHtcbiAgICAgICAgb3B0aW9ucy5wdXNoKG0oJ29wdGlvbicsIGF0dHJzLnBsYWNlaG9sZGVyLCB7XG4gICAgICAgICAgZGlzYWJsZWQ6IG51bGwsXG4gICAgICAgICAgc2VsZWN0ZWQ6IG51bGxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQge2xhYmVsID0gJycsIC4uLm9wdGlvbkF0dHJzfSA9IHZhbHVlc1tpXTtcblxuICAgICAgICBvcHRpb25BdHRycy5pZCA9IGAke2F0dHJzLmlkfS0ke2l9YDtcbiAgICAgICAgaWYgKCFvcHRpb25BdHRycy5zZWxlY3RlZCB8fCBhdHRycy5wbGFjZWhvbGRlcikge1xuICAgICAgICAgIGRlbGV0ZSBvcHRpb25BdHRycy5zZWxlY3RlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1NlbGVjdCkge1xuICAgICAgICAgIGxldCBvID0gbSgnb3B0aW9uJywgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGFiZWwpLCBvcHRpb25BdHRycyk7XG4gICAgICAgICAgb3B0aW9ucy5wdXNoKG8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB3cmFwcGVyQ2xhc3MgPSBvcHRpb25UeXBlO1xuICAgICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IGBmYi0ke29wdGlvblR5cGV9LWlubGluZWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbkF0dHJzLnR5cGUgPSBvcHRpb25UeXBlO1xuICAgICAgICAgIGlmIChvcHRpb25BdHRycy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgb3B0aW9uQXR0cnMuY2hlY2tlZCA9ICdjaGVja2VkJztcbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25BdHRycy5zZWxlY3RlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGlucHV0ID0gbSgnaW5wdXQnLCBudWxsLCBPYmplY3QuYXNzaWduKHt9LCBhdHRycywgb3B0aW9uQXR0cnMpKTtcbiAgICAgICAgICBsZXQgbGFiZWxBdHRycyA9IHtmb3I6IG9wdGlvbkF0dHJzLmlkfTtcbiAgICAgICAgICBsZXQgbGFiZWxDb250ZW50ID0gW2lucHV0LCBsYWJlbF07XG4gICAgICAgICAgaWYgKHRvZ2dsZSkge1xuICAgICAgICAgICAgbGV0IGtjVG9nZ2xlID0gbSgnc3BhbicpO1xuICAgICAgICAgICAgbGFiZWxDb250ZW50ID0gW2lucHV0LCBrY1RvZ2dsZSwgbGFiZWxdO1xuICAgICAgICAgICAgbGFiZWxBdHRycy5jbGFzc05hbWUgPSAna2MtdG9nZ2xlJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgaW5wdXRMYWJlbCA9IG0oJ2xhYmVsJywgbGFiZWxDb250ZW50LCBsYWJlbEF0dHJzKTtcbiAgICAgICAgICBsZXQgd3JhcHBlciA9IG0oJ2RpdicsIGlucHV0TGFiZWwsIHtjbGFzc05hbWU6IHdyYXBwZXJDbGFzc30pO1xuICAgICAgICAgIG9wdGlvbnMucHVzaCh3cmFwcGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzU2VsZWN0ICYmIG90aGVyKSB7XG4gICAgICAgIGxldCBvdGhlck9wdGlvbkF0dHJzID0ge1xuICAgICAgICAgIGlkOiBgJHthdHRycy5pZH0tb3RoZXJgLFxuICAgICAgICAgIGNsYXNzTmFtZTogYCR7YXR0cnMuY2xhc3NOYW1lfSBvdGhlci1vcHRpb25gLFxuICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgY2xpY2s6ICgpID0+IHV0aWxzLm90aGVyT3B0aW9uQ0Iob3RoZXJPcHRpb25BdHRycy5pZClcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIGxldCBsYWJlbCA9IG1pMThuLmN1cnJlbnQub3RoZXI7XG4gICAgICAgIGxldCB3cmFwcGVyQ2xhc3MgPSBvcHRpb25UeXBlO1xuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgd3JhcHBlckNsYXNzICs9ICctaW5saW5lJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25BdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEsIG90aGVyT3B0aW9uQXR0cnMpO1xuICAgICAgICBvcHRpb25BdHRycy50eXBlID0gb3B0aW9uVHlwZTtcblxuICAgICAgICBsZXQgb3RoZXJWYWxBdHRycyA9IHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgbmFtZTogZGF0YS5uYW1lLFxuICAgICAgICAgIGlkOiBgJHtvdGhlck9wdGlvbkF0dHJzLmlkfS12YWx1ZWAsXG4gICAgICAgICAgY2xhc3NOYW1lOiAnb3RoZXItdmFsJ1xuICAgICAgICB9O1xuICAgICAgICBsZXQgb3RoZXJJbnB1dHMgPSBbXG4gICAgICAgICAgbSgnaW5wdXQnLCBudWxsLCBvcHRpb25BdHRycyksXG4gICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ090aGVyJyksXG4gICAgICAgICAgbSgnaW5wdXQnLCBudWxsLCBvdGhlclZhbEF0dHJzKVxuICAgICAgICBdO1xuICAgICAgICBsZXQgaW5wdXRMYWJlbCA9IG0oJ2xhYmVsJywgb3RoZXJJbnB1dHMsIHtmb3I6IG9wdGlvbkF0dHJzLmlkfSk7XG4gICAgICAgIGxldCB3cmFwcGVyID0gbSgnZGl2JywgaW5wdXRMYWJlbCwge2NsYXNzTmFtZTogd3JhcHBlckNsYXNzfSk7XG4gICAgICAgIG9wdGlvbnMucHVzaCh3cmFwcGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGVtcGxhdGU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHRlbXBsYXRlID0gbShvcHRpb25UeXBlLCBvcHRpb25zLCBkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVtcGxhdGUgPSBtKCdkaXYnLCBvcHRpb25zLCB7Y2xhc3NOYW1lOiB0eXBlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIHV0aWxzLmRlZmF1bHRGaWVsZCA9IGZpZWxkRGF0YSA9PiB7XG4gICAgbGV0IHtsYWJlbCwgZGVzY3JpcHRpb24sIHN1YnR5cGUsIHR5cGUsIGlkLCBpc1ByZXZpZXcsIC4uLmRhdGF9ID0gZmllbGREYXRhO1xuICAgIGlmIChpZCkge1xuICAgICAgaWYgKGlzUHJldmlldykge1xuICAgICAgICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgICAgICAgZGF0YS5uYW1lID0gZGF0YS5uYW1lICsgJy1wcmV2aWV3JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhLm5hbWUgPSB1dGlscy5uYW1lQXR0cihmaWVsZERhdGEpICsgJy1wcmV2aWV3JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGF0YS5pZCA9IGRhdGEubmFtZTtcbiAgICB9XG4gICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICBkYXRhLnRpdGxlID0gZGVzY3JpcHRpb247XG4gICAgfVxuICAgIGlmIChzdWJ0eXBlKSB7XG4gICAgICB0eXBlID0gc3VidHlwZTtcbiAgICB9XG5cbiAgICBsZXQgZmllbGQgPSB7XG4gICAgICBmaWVsZDogbSh0eXBlLCB1dGlscy5wYXJzZWRIdG1sKGxhYmVsKSwgZGF0YSksXG4gICAgICBvblJlbmRlcjogdXRpbHMubm9vcFxuICAgIH07XG5cbiAgICByZXR1cm4gKCkgPT4gZmllbGQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIExvYWRzIGFuIGFycmF5IG9mIHNjcmlwdHMgdXNpbmcgalF1ZXJ5J3MgYGdldFNjcmlwdGBcbiAgICogQHBhcmFtICB7QXJyYXl8U3RyaW5nfSAgc2NyaXB0U2NyICAgIHNjcmlwdHNcbiAgICogQHBhcmFtICB7U3RyaW5nfSBwYXRoICAgb3B0aW9uYWwgdG8gbG9hZCBmb3JtXG4gICAqIEByZXR1cm4ge1Byb21pc2V9ICAgICAgIGEgcHJvbWlzZVxuICAgKi9cbiAgdXRpbHMuZ2V0U2NyaXB0cyA9IChzY3JpcHRTY3IsIHBhdGgpID0+IHtcbiAgICBjb25zdCAkID0galF1ZXJ5O1xuICAgIGxldCBfYXJyID0gW107XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NyaXB0U2NyKSkge1xuICAgICAgc2NyaXB0U2NyID0gW3NjcmlwdFNjcl07XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc0NhY2hlZChzY3JpcHRTY3IpKSB7XG4gICAgICBfYXJyID0gJC5tYXAoc2NyaXB0U2NyLCBzcmMgPT4ge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgICAgICBkYXRhVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgdXJsOiAocGF0aCB8fCAnJykgKyBzcmNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuICQuYWpheChvcHRpb25zKS5kb25lKCgpID0+IHdpbmRvdy5mYkxvYWRlZC5qcy5wdXNoKHNyYykpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2Fyci5wdXNoKCQuRGVmZXJyZWQoIGRlZmVycmVkID0+ICQoIGRlZmVycmVkLnJlc29sdmUgKSkpO1xuXG4gICAgcmV0dXJuICQud2hlbiguLi5fYXJyKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHJlbW90ZSByZXNvdXJjZSBpcyBhbHJlYWR5IGxvYWRlZFxuICAgKiBAcGFyYW0gIHtTdHJpbmd8QXJyYXl9IHNyYyAgdXJsIG9mIHJlbW90ZSBzY3JpcHQgb3IgY3NzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gICAgICAgdHlwZSAgICAgICAnanMnIG9yICdjc3MnXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgaXNDYWNoZWRcbiAgICovXG4gIHV0aWxzLmlzQ2FjaGVkID0gKHNyYywgdHlwZSA9ICdqcycpID0+IHtcbiAgICBsZXQgaXNDYWNoZWQgPSBmYWxzZTtcbiAgICBjb25zdCBjYWNoZSA9IHdpbmRvdy5mYkxvYWRlZFt0eXBlXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzcmMpKSB7XG4gICAgICBpc0NhY2hlZCA9IHNyYy5ldmVyeShzID0+IHV0aWxzLmluQXJyYXkocywgY2FjaGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNDYWNoZWQgPSB1dGlscy5pbkFycmF5KHNyYywgY2FjaGUpO1xuICAgIH1cbiAgICByZXR1cm4gaXNDYWNoZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgc3R5bGVzaGVldHMgdG8gdGhlIGhlYWRcbiAgICogQHBhcmFtICB7QXJyYXl9IHNjcmlwdFNjclxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHBhdGhcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHV0aWxzLmdldFN0eWxlcyA9IChzY3JpcHRTY3IsIHBhdGgpID0+IHtcbiAgICBpZiAodXRpbHMuaXNDYWNoZWQoc2NyaXB0U2NyLCAnY3NzJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXBwZW5kU3R5bGUgPSAoaHJlZikgPT4ge1xuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgIGxpbmsudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgIGxpbmsuaHJlZiA9IGhyZWY7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgd2luZG93LmZiTG9hZGVkLmNzcy5wdXNoKGhyZWYpO1xuICAgIH07XG4gICAgc2NyaXB0U2NyLmZvckVhY2goc3JjID0+IGFwcGVuZFN0eWxlKChwYXRoIHx8ICcnKSArIHNyYykpO1xuICB9O1xuXG4gIHV0aWxzLmxvbmdUZXh0VGVtcGxhdGUgPSBkYXRhID0+IHtcbiAgICBsZXQge3ZhbHVlID0gJycsIC4uLmF0dHJzfSA9IGRhdGE7XG4gICAgbGV0IHRlbXBsYXRlID0ge1xuICAgICAgZmllbGQ6IG0oJ3RleHRhcmVhJywgdXRpbHMucGFyc2VkSHRtbCh2YWx1ZSksIGF0dHJzKVxuICAgIH07XG4gICAgbGV0IGVkaXRvcnMgPSB7XG4gICAgICB0aW55bWNlOiB7XG4gICAgICAgIGpzOiBbJy8vY2RuLnRpbnltY2UuY29tLzQvdGlueW1jZS5taW4uanMnXSxcbiAgICAgICAgb25SZW5kZXI6IGV2dCA9PiB7XG4gICAgICAgICAgaWYgKHdpbmRvdy50aW55bWNlLmVkaXRvcnNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgIHdpbmRvdy50aW55bWNlLmVkaXRvcnNbZGF0YS5pZF0ucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdpbmRvdy50aW55bWNlLmluaXQoe1xuICAgICAgICAgICAgdGFyZ2V0OiB0ZW1wbGF0ZS5maWVsZCxcbiAgICAgICAgICAgIGhlaWdodDogMjUwLFxuICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAnYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3InLFxuICAgICAgICAgICAgICAnc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuJyxcbiAgICAgICAgICAgICAgJ2luc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIGNvbnRleHRtZW51IHBhc3RlIGNvZGUnXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdG9vbGJhcjogJ2luc2VydGZpbGUgdW5kbyByZWRvIHwgc3R5bGVzZWxlY3QgfCBib2xkIGl0YWxpYyB8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IGFsaWduanVzdGlmeSB8IGJ1bGxpc3QgbnVtbGlzdCBvdXRkZW50IGluZGVudCB8IGxpbmsgaW1hZ2UnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBxdWlsbDoge1xuICAgICAgICBqczogWycvL2Nkbi5xdWlsbGpzLmNvbS8xLjEuMy9xdWlsbC5qcyddLFxuICAgICAgICBjc3M6IFsnLy9jZG4ucXVpbGxqcy5jb20vMS4xLjMvcXVpbGwuc25vdy5jc3MnXSxcbiAgICAgICAgb25SZW5kZXI6IGV2dCA9PiB7XG4gICAgICAgICAgY29uc3QgRGVsdGEgPSB3aW5kb3cuUXVpbGwuaW1wb3J0KCdkZWx0YScpO1xuICAgICAgICAgIHdpbmRvdy5mYkVkaXRvcnMucXVpbGxbZGF0YS5pZF0gPSB7fTtcbiAgICAgICAgICBsZXQgZWRpdG9yID0gd2luZG93LmZiRWRpdG9ycy5xdWlsbFtkYXRhLmlkXTtcbiAgICAgICAgICBlZGl0b3IuaW5zdGFuY2UgPSBuZXcgd2luZG93LlF1aWxsKHRlbXBsYXRlLmZpZWxkLCB7XG4gICAgICAgICAgICBtb2R1bGVzOiB7XG4gICAgICAgICAgICAgIHRvb2xiYXI6IFtcbiAgICAgICAgICAgICAgICBbeydoZWFkZXInOiBbMSwgMiwgZmFsc2VdfV0sXG4gICAgICAgICAgICAgICAgWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnXSxcbiAgICAgICAgICAgICAgICBbJ2NvZGUtYmxvY2snXVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGF0dHJzLnBsYWNlaG9sZGVyIHx8ICcnLFxuICAgICAgICAgICAgdGhlbWU6ICdzbm93J1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVkaXRvci5kYXRhID0gbmV3IERlbHRhKCk7XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBlZGl0b3IuaW5zdGFuY2Uuc2V0Q29udGVudHMod2luZG93LkpTT04ucGFyc2UodXRpbHMucGFyc2VkSHRtbCh2YWx1ZSkpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdG9yLmluc3RhbmNlLm9uKCd0ZXh0LWNoYW5nZScsIGZ1bmN0aW9uKGRlbHRhKSB7XG4gICAgICAgICAgICBlZGl0b3IuZGF0YSA9IGVkaXRvci5kYXRhLmNvbXBvc2UoZGVsdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChkYXRhLnR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICAgIHRlbXBsYXRlLm9uUmVuZGVyID0gZWRpdG9yc1tkYXRhLnR5cGVdLm9uUmVuZGVyO1xuICAgIH1cbiAgICBpZiAoZGF0YS50eXBlID09PSAncXVpbGwnKSB7XG4gICAgICB0ZW1wbGF0ZS5maWVsZCA9IG0oJ2RpdicsIG51bGwsIGF0dHJzKTtcbiAgICB9XG5cbiAgICBjb25zdCBvblJlbmRlciA9ICgpID0+IHtcbiAgICAgIGlmIChlZGl0b3JzW2RhdGEudHlwZV0pIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZmllbGRSZW5kZXJlZCcsIG9uUmVuZGVyKTtcblxuICAgICAgICBpZiAoZWRpdG9yc1tkYXRhLnR5cGVdLmNzcykge1xuICAgICAgICAgIHV0aWxzLmdldFN0eWxlcyhlZGl0b3JzW2RhdGEudHlwZV0uY3NzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWRpdG9yc1tkYXRhLnR5cGVdLmpzICYmICF1dGlscy5pc0NhY2hlZChlZGl0b3JzW2RhdGEudHlwZV0uanMpKSB7XG4gICAgICAgICAgdXRpbHMuZ2V0U2NyaXB0cyhlZGl0b3JzW2RhdGEudHlwZV0uanMpLmRvbmUodGVtcGxhdGUub25SZW5kZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRlbXBsYXRlLm9uUmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtmaWVsZDogdGVtcGxhdGUuZmllbGQsIG9uUmVuZGVyfTtcbiAgfTtcblxuICB1dGlscy50ZW1wbGF0ZXMgPSBbXG4gICAgWydhdXRvY29tcGxldGUnLFxuICAgICAgZmllbGREYXRhID0+IHtcbiAgICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhmaWVsZERhdGEpO1xuICAgICAgICBsZXQgZmllbGRMYWJlbCA9IHV0aWxzLm1ha2VMYWJlbChmaWVsZERhdGEpO1xuICAgICAgICBsZXQgYXV0b2NvbXBsZXRlID0gdXRpbHMuYXV0b2NvbXBsZXRlVGVtcGxhdGUoYXR0cnMpO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSB7XG4gICAgICAgICAgZmllbGQ6IFtmaWVsZExhYmVsLCBhdXRvY29tcGxldGUuZmllbGRdLFxuICAgICAgICAgIG9uUmVuZGVyOiBhdXRvY29tcGxldGUub25SZW5kZXJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgICAgfV0sXG4gICAgW2RlZmF1bHRTdWJ0eXBlcy50ZXh0LmNvbmNhdChbJ251bWJlcicsICdmaWxlJywgJ2RhdGUnXSksXG4gICAgICBmaWVsZERhdGEgPT4ge1xuICAgICAgICBsZXQgYXR0cnMgPSB1dGlscy5wcm9jZXNzRmllbGREYXRhQXR0cnMoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IGZpZWxkTGFiZWwgPSB1dGlscy5tYWtlTGFiZWwoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0ge1xuICAgICAgICAgIGZpZWxkOiBbZmllbGRMYWJlbCwgbSgnaW5wdXQnLCBudWxsLCBhdHRycyldLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XSxcbiAgICBbWydwYXJhZ3JhcGgnXS5jb25jYXQoZGVmYXVsdFN1YnR5cGVzLnBhcmFncmFwaCksXG4gICAgICBmaWVsZERhdGEgPT4ge1xuICAgICAgICBsZXQgYXR0cnMgPSB1dGlscy5wcm9jZXNzRmllbGREYXRhQXR0cnMoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0ge1xuICAgICAgICAgIGZpZWxkOiBbbShmaWVsZERhdGEudHlwZSwgdXRpbHMucGFyc2VkSHRtbChmaWVsZERhdGEubGFiZWwpLCBhdHRycyldLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XSxcbiAgICBbZGVmYXVsdFN1YnR5cGVzLmJ1dHRvbixcbiAgICAgIGZpZWxkRGF0YSA9PiB7XG4gICAgICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhmaWVsZERhdGEpO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSB7XG4gICAgICAgICAgZmllbGQ6IG0oJ2J1dHRvbicsIGZpZWxkRGF0YS5sYWJlbCwgYXR0cnMpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XSxcbiAgICBbWydzZWxlY3QnLCAnY2hlY2tib3gtZ3JvdXAnLCAncmFkaW8tZ3JvdXAnLCAnY2hlY2tib3gnXSxcbiAgICAgIGZpZWxkRGF0YSA9PiB7XG4gICAgICAgIGxldCBmaWVsZExhYmVsID0gdXRpbHMubWFrZUxhYmVsKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCBmaWVsZCA9IHV0aWxzLnNlbGVjdFRlbXBsYXRlKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHtcbiAgICAgICAgICBmaWVsZDogW2ZpZWxkTGFiZWwsIGZpZWxkXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XSxcbiAgICBbWyd0ZXh0YXJlYScsICd0aW55bWNlJywgJ3F1aWxsJ10sXG4gICAgICBmaWVsZERhdGEgPT4ge1xuICAgICAgICBsZXQgYXR0cnMgPSB1dGlscy5wcm9jZXNzRmllbGREYXRhQXR0cnMoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IGZpZWxkID0gdXRpbHMubG9uZ1RleHRUZW1wbGF0ZShhdHRycyk7XG4gICAgICAgIGxldCBmaWVsZExhYmVsID0gdXRpbHMubWFrZUxhYmVsKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHtcbiAgICAgICAgICBmaWVsZDogW2ZpZWxkTGFiZWwsIGZpZWxkLmZpZWxkXSxcbiAgICAgICAgICBvblJlbmRlcjogZmllbGQub25SZW5kZXJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgICAgfV1cbiAgICBdO1xuXG4gIHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyA9IGZpZWxkRGF0YSA9PiB7XG4gICAgbGV0IHtcbiAgICAgIGxhYmVsLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBzdWJ0eXBlLFxuICAgICAgLi4uYXR0cnN9ID0gZmllbGREYXRhO1xuXG4gICAgaWYgKCFhdHRycy5pZCkge1xuICAgICAgYXR0cnMuaWQgPSBhdHRycy5uYW1lO1xuICAgIH1cblxuICAgIGlmIChzdWJ0eXBlKSB7XG4gICAgICBhdHRycy50eXBlID0gc3VidHlwZTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cnMubXVsdGlwbGUgfHwgYXR0cnMudHlwZSA9PT0gJ2NoZWNrYm94LWdyb3VwJykge1xuICAgICAgYXR0cnMubmFtZSA9IGF0dHJzLm5hbWUgKyAnW10nO1xuICAgIH1cblxuICAgIGlmIChhdHRycy5yZXF1aXJlZCkge1xuICAgICAgYXR0cnMucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgYXR0cnNbJ2FyaWEtcmVxdWlyZWQnXSA9ICd0cnVlJztcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG4gIH07XG5cbiAgdXRpbHMuZ2V0VGVtcGxhdGUgPSAoZmllbGREYXRhLCBpc1ByZXZpZXcgPSBmYWxzZSkgPT4ge1xuICAgIGxldCBmaWVsZDtcbiAgICBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICBpZiAoZmllbGREYXRhLm5hbWUpIHtcbiAgICAgICAgZmllbGREYXRhLm5hbWUgPSBmaWVsZERhdGEubmFtZSArICctcHJldmlldyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWVsZERhdGEubmFtZSA9IHV0aWxzLm5hbWVBdHRyKGZpZWxkRGF0YSkgKyAnLXByZXZpZXcnO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdGVtcGxhdGUgPSB1dGlscy50ZW1wbGF0ZU1hcChmaWVsZERhdGEudHlwZSk7XG5cbiAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUoZmllbGREYXRhLCBpc1ByZXZpZXcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wbGF0ZSA9IHV0aWxzLmRlZmF1bHRGaWVsZChmaWVsZERhdGEsIGlzUHJldmlldykoKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGREYXRhLnR5cGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICBsZXQgd3JhcHBlckF0dHJzID0ge307XG4gICAgICBpZiAoZmllbGREYXRhLm5hbWUpIHtcbiAgICAgICAgd3JhcHBlckF0dHJzLmNsYXNzTmFtZSA9XG4gICAgICAgIGBmYi0ke2ZpZWxkRGF0YS50eXBlfSBmb3JtLWdyb3VwIGZpZWxkLSR7ZmllbGREYXRhLm5hbWV9YDtcbiAgICAgIH1cbiAgICAgIGZpZWxkID0gdXRpbHMubWFya3VwKCdkaXYnLCB0ZW1wbGF0ZS5maWVsZCwgd3JhcHBlckF0dHJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGF0dHJzID0gdXRpbHMucHJvY2Vzc0ZpZWxkRGF0YUF0dHJzKGZpZWxkRGF0YSk7XG4gICAgICBmaWVsZCA9IHV0aWxzLm1hcmt1cCgnaW5wdXQnLCBudWxsLCBhdHRycyk7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBsYXRlLm9uUmVuZGVyKSB7XG4gICAgICBmaWVsZC5hZGRFdmVudExpc3RlbmVyKCdmaWVsZFJlbmRlcmVkJywgdGVtcGxhdGUub25SZW5kZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBmaWVsZDtcbiAgfTtcblxuLyoqXG4gKiBDYWxsYmFjayBmb3Igb3RoZXIgb3B0aW9uLlxuICogVG9nZ2xlcyB0aGUgaGlkZGVuIHRleHQgYXJlYSBmb3IgXCJvdGhlclwiIG9wdGlvbi5cbiAqIEBwYXJhbSAge1N0cmluZ30gb3RoZXJJZCBpZCBvZiB0aGUgXCJvdGhlclwiIG9wdGlvbiBpbnB1dFxuICovXG51dGlscy5vdGhlck9wdGlvbkNCID0gb3RoZXJJZCA9PiB7XG4gIGNvbnN0IG90aGVySW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdGhlcklkKTtcbiAgY29uc3Qgb3RoZXJJbnB1dFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7b3RoZXJJZH0tdmFsdWVgKTtcblxuICBpZiAob3RoZXJJbnB1dC5jaGVja2VkKSB7XG4gICAgb3RoZXJJbnB1dFZhbHVlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgfSBlbHNlIHtcbiAgICBvdGhlcklucHV0VmFsdWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxufTtcblxuLyoqXG4gKiBDYXBpdGFsaXplcyBhIHN0cmluZ1xuICogQHBhcmFtICB7U3RyaW5nfSBzdHIgdW5jYXBpdGFsaXplZCBzdHJpbmdcbiAqIEByZXR1cm4ge1N0cmluZ30gc3RyIGNhcGl0YWxpemVkIHN0cmluZ1xuICovXG51dGlscy5jYXBpdGFsaXplID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXGJcXHcvZywgZnVuY3Rpb24obSkge1xuICAgICAgcmV0dXJuIG0udG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbn07XG5cblxudXRpbHMubWVyZ2UgPSAob2JqMSwgb2JqMikgPT4ge1xuICBsZXQgbWVyZ2VkT2JqID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqMSwgb2JqMik7XG4gIGZvciAobGV0IHByb3AgaW4gb2JqMikge1xuICAgIGlmIChtZXJnZWRPYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iajJbcHJvcF0pKSB7XG4gICAgICAgIG1lcmdlZE9ialtwcm9wXSA9IEFycmF5LmlzQXJyYXkob2JqMVtwcm9wXSkgPyB1dGlscy51bmlxdWUob2JqMVtwcm9wXS5jb25jYXQob2JqMltwcm9wXSkpIDogb2JqMltwcm9wXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iajJbcHJvcF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1lcmdlZE9ialtwcm9wXSA9IHV0aWxzLm1lcmdlKG9iajFbcHJvcF0sIG9iajJbcHJvcF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VkT2JqW3Byb3BdID0gb2JqMltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9iajtcbn07XG5cbnV0aWxzLmFkZEV2ZW50TGlzdGVuZXJzID0gKGVsLCBldnRzLCBmbikgPT4ge1xuICByZXR1cm4gZXZ0cy5zcGxpdCgnICcpLmZvckVhY2goZSA9PiBlbC5hZGRFdmVudExpc3RlbmVyKGUsIGZuLCBmYWxzZSkpO1xufTtcblxuLyoqXG4gKiBGaW5kIHRoZSBjbG9zZXN0IHBhcmVudCBieSBjbGFzc1xuICogQHBhcmFtICB7T2JqZWN0fSBlbCAgRE9NIGVsZW1lbnRcbiAqIEBwYXJhbSAge1N0cmluZ30gY2xzIGNsYXNzXG4gKiBAcmV0dXJuIHtPYmplY3R9ICAgICBET00gRWxlbWVudFxuICovXG51dGlscy5jbG9zZXN0ID0gKGVsLCBjbHMpID0+IHtcbiAgbGV0IGNsYXNzTmFtZSA9IGNscy5yZXBsYWNlKCcuJywgJycpO1xuICB3aGlsZSAoKGVsID0gZWwucGFyZW50RWxlbWVudCkgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKTtcbiAgcmV0dXJuIGVsO1xufTtcblxudXRpbHMubm9vcCA9ICgpID0+IG51bGw7XG5cbnV0aWxzLmRlYm91bmNlID0gKGZ1bmMsIHdhaXQgPSAyNTAsIGltbWVkaWF0ZSA9IGZhbHNlKSA9PiB7XG4gIGxldCB0aW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgIGxldCBjb250ZXh0ID0gdGhpcztcbiAgICBsZXQgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGxldCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBtb2JpbGUgY2xhc3NcbiAqIEB0b2RvIGZpbmQgY3NzIG9ubHkgc29sdXRpb25cbiAqIEByZXR1cm4ge1N0cmluZ30gTW9iaWxlIGNsYXNzIGFkZGVkIHRvIGZvcm1CdWlsZGVyXG4gKi9cbnV0aWxzLm1vYmlsZUNsYXNzID0gKCkgPT4ge1xuICBsZXQgbW9iaWxlQ2xhc3MgPSAnJztcbiAgKGZ1bmN0aW9uKGEpIHtcbiAgICBpZiAoLyhhbmRyb2lkfGJiXFxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVxcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFxcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIGNlfHhkYXx4aWluby9pLnRlc3QoYSkgfHwgLzEyMDd8NjMxMHw2NTkwfDNnc298NHRocHw1MFsxLTZdaXw3NzBzfDgwMnN8YSB3YXxhYmFjfGFjKGVyfG9vfHNcXC0pfGFpKGtvfHJuKXxhbChhdnxjYXxjbyl8YW1vaXxhbihleHxueXx5dyl8YXB0dXxhcihjaHxnbyl8YXModGV8dXMpfGF0dHd8YXUoZGl8XFwtbXxyIHxzICl8YXZhbnxiZShja3xsbHxucSl8YmkobGJ8cmQpfGJsKGFjfGF6KXxicihlfHYpd3xidW1ifGJ3XFwtKG58dSl8YzU1XFwvfGNhcGl8Y2N3YXxjZG1cXC18Y2VsbHxjaHRtfGNsZGN8Y21kXFwtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjXFwtc3xkZXZpfGRpY2F8ZG1vYnxkbyhjfHApb3xkcygxMnxcXC1kKXxlbCg0OXxhaSl8ZW0obDJ8dWwpfGVyKGljfGswKXxlc2w4fGV6KFs0LTddMHxvc3x3YXx6ZSl8ZmV0Y3xmbHkoXFwtfF8pfGcxIHV8ZzU2MHxnZW5lfGdmXFwtNXxnXFwtbW98Z28oXFwud3xvZCl8Z3IoYWR8dW4pfGhhaWV8aGNpdHxoZFxcLShtfHB8dCl8aGVpXFwtfGhpKHB0fHRhKXxocCggaXxpcCl8aHNcXC1jfGh0KGMoXFwtfCB8X3xhfGd8cHxzfHQpfHRwKXxodShhd3x0Yyl8aVxcLSgyMHxnb3xtYSl8aTIzMHxpYWMoIHxcXC18XFwvKXxpYnJvfGlkZWF8aWcwMXxpa29tfGltMWt8aW5ub3xpcGFxfGlyaXN8amEodHx2KWF8amJyb3xqZW11fGppZ3N8a2RkaXxrZWppfGtndCggfFxcLyl8a2xvbnxrcHQgfGt3Y1xcLXxreW8oY3xrKXxsZShub3x4aSl8bGcoIGd8XFwvKGt8bHx1KXw1MHw1NHxcXC1bYS13XSl8bGlid3xseW54fG0xXFwtd3xtM2dhfG01MFxcL3xtYSh0ZXx1aXx4byl8bWMoMDF8MjF8Y2EpfG1cXC1jcnxtZShyY3xyaSl8bWkobzh8b2F8dHMpfG1tZWZ8bW8oMDF8MDJ8Yml8ZGV8ZG98dChcXC18IHxvfHYpfHp6KXxtdCg1MHxwMXx2ICl8bXdicHxteXdhfG4xMFswLTJdfG4yMFsyLTNdfG4zMCgwfDIpfG41MCgwfDJ8NSl8bjcoMCgwfDEpfDEwKXxuZSgoY3xtKVxcLXxvbnx0Znx3Znx3Z3x3dCl8bm9rKDZ8aSl8bnpwaHxvMmltfG9wKHRpfHd2KXxvcmFufG93ZzF8cDgwMHxwYW4oYXxkfHQpfHBkeGd8cGcoMTN8XFwtKFsxLThdfGMpKXxwaGlsfHBpcmV8cGwoYXl8dWMpfHBuXFwtMnxwbyhja3xydHxzZSl8cHJveHxwc2lvfHB0XFwtZ3xxYVxcLWF8cWMoMDd8MTJ8MjF8MzJ8NjB8XFwtWzItN118aVxcLSl8cXRla3xyMzgwfHI2MDB8cmFrc3xyaW05fHJvKHZlfHpvKXxzNTVcXC98c2EoZ2V8bWF8bW18bXN8bnl8dmEpfHNjKDAxfGhcXC18b298cFxcLSl8c2RrXFwvfHNlKGMoXFwtfDB8MSl8NDd8bWN8bmR8cmkpfHNnaFxcLXxzaGFyfHNpZShcXC18bSl8c2tcXC0wfHNsKDQ1fGlkKXxzbShhbHxhcnxiM3xpdHx0NSl8c28oZnR8bnkpfHNwKDAxfGhcXC18dlxcLXx2ICl8c3koMDF8bWIpfHQyKDE4fDUwKXx0NigwMHwxMHwxOCl8dGEoZ3R8bGspfHRjbFxcLXx0ZGdcXC18dGVsKGl8bSl8dGltXFwtfHRcXC1tb3x0byhwbHxzaCl8dHMoNzB8bVxcLXxtM3xtNSl8dHhcXC05fHVwKFxcLmJ8ZzF8c2kpfHV0c3R8djQwMHx2NzUwfHZlcml8dmkocmd8dGUpfHZrKDQwfDVbMC0zXXxcXC12KXx2bTQwfHZvZGF8dnVsY3x2eCg1Mnw1M3w2MHw2MXw3MHw4MHw4MXw4M3w4NXw5OCl8dzNjKFxcLXwgKXx3ZWJjfHdoaXR8d2koZyB8bmN8bncpfHdtbGJ8d29udXx4NzAwfHlhc1xcLXx5b3VyfHpldG98enRlXFwtL2kudGVzdChhLnN1YnN0cigwLCA0KSkpIHtcbiAgICAgIG1vYmlsZUNsYXNzID0gJyBmYi1tb2JpbGUnO1xuICAgIH1cbiAgfSkobmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBuYXZpZ2F0b3IudmVuZG9yIHx8IHdpbmRvdy5vcGVyYSk7XG4gIHJldHVybiBtb2JpbGVDbGFzcztcbn07XG5cbi8qKlxuICogQ29udmVydCBjb252ZXJ0cyBtZXNzeSBgY2wjc3NOYW1lc2AgaW50byB2YWxpZCBgY2xhc3MtbmFtZXNgXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ30gaHlwaGVuYXRlZCBzdHJpbmdcbiAqL1xudXRpbHMubWFrZUNsYXNzTmFtZSA9IHN0ciA9PiB7XG4gIHJldHVybiB1dGlscy5oeXBoZW5DYXNlKHN0ci5yZXBsYWNlKC9bXlxcd1xcc1xcLV0vZ2ksICcnKSk7XG59O1xuXG4vKipcbiAqIE1ha2Ugc3RyaW5ncyBzYWZlIHRvIGJlIHVzZWQgYXMgY2xhc3Nlc1xuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyIHN0cmluZyB0byBiZSBjb252ZXJ0ZWRcbiAqIEByZXR1cm4ge1N0cmluZ30gICAgIGNvbnZlcnRlciBzdHJpbmdcbiAqL1xudXRpbHMuc2FmZW5hbWUgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xccy9nLCAnLScpLnJlcGxhY2UoL1teYS16QS1aMC05XFxbXFxdXFxfLV0vZywgJycpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIFN0cmlwcyBub24tbnVtYmVycyBmcm9tIGEgbnVtYmVyIG9ubHkgaW5wdXRcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHN0ciBzdHJpbmcgd2l0aCBwb3NzaWJsZSBudW1iZXJcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgIHN0cmluZyB3aXRob3V0IG51bWJlcnNcbiAqL1xudXRpbHMuZm9yY2VOdW1iZXIgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1teMC05XS9nLCAnJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb20uanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2Zyb20uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2dldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fa2V5b2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21ldGEuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21pY3JvdGFzay5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdGFzay5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmlzLWl0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubWFwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvbWkxOG4vZGlzdC9taTE4bi5taW4uanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS1tb2R1bGUuanMiLCJub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwic3JjL2pzL2NvbmZpZy5qcyIsInNyYy9qcy9kYXRhLmpzIiwic3JjL2pzL2RvbS5qcyIsInNyYy9qcy9ldmVudHMuanMiLCJzcmMvanMvZm9ybS1idWlsZGVyLmpzIiwic3JjL2pzL2hlbHBlcnMuanMiLCJzcmMvanMvcG9seWZpbGxzLmpzIiwic3JjL2pzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7O0FDREE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7O0FDQUE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBOztBQ0ZBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU9BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBOztBQ0FBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUksT0FBSixFQUFhO0FBQ1gsV0FBSyxLQUFMLENBQVcsT0FBWCxFQUFvQixJQUFwQjtBQUNEO0FBQ0YsR0FkRDtBQWVELENBakJEOztBQW1CQTs7Ozs7QUFLQSxNQUFNLFdBQU4sR0FBb0IsWUFBTTtBQUN4QixNQUFJLGNBQWMsRUFBbEI7QUFDQSxHQUFDLFVBQVMsQ0FBVCxFQUFZO0FBQ1gsUUFBSSwyVEFBMlQsSUFBM1QsQ0FBZ1UsQ0FBaFUsS0FBc1UsMGtEQUEwa0QsSUFBMWtELENBQStrRCxFQUFFLE1BQUYsQ0FBUyxDQUFULEVBQVksQ0FBWixDQUEva0QsQ0FBMVUsRUFBMDZEO0FBQ3g2RCxvQkFBYyxZQUFkO0FBQ0Q7QUFDRixHQUpELEVBSUcsVUFBVSxTQUFWLElBQXVCLFVBQVUsTUFBakMsSUFBMkMsT0FBTyxLQUpyRDtBQUtBLFNBQU8sV0FBUDtBQUNELENBUkQ7O0FBVUE7Ozs7OztBQU1BLE1BQU0sYUFBTixHQUFzQixlQUFPO0FBQzNCLFNBQU8sTUFBTSxVQUFOLENBQWlCLElBQUksT0FBSixDQUFZLGFBQVosRUFBMkIsRUFBM0IsQ0FBakIsQ0FBUDtBQUNELENBRkQ7O0FBSUE7Ozs7OztBQU1BLE1BQU0sUUFBTixHQUFpQixlQUFPO0FBQ3RCLFNBQU8sSUFBSSxPQUFKLENBQVksS0FBWixFQUFtQixHQUFuQixFQUF3QixPQUF4QixDQUFnQyxzQkFBaEMsRUFBd0QsRUFBeEQsRUFBNEQsV0FBNUQsRUFBUDtBQUNELENBRkQ7O0FBSUE7Ozs7OztBQU1BLE1BQU0sV0FBTixHQUFvQixlQUFPO0FBQ3pCLFNBQU8sSUFBSSxPQUFKLENBQVksU0FBWixFQUF1QixFQUF2QixDQUFQO0FBQ0QsQ0FGRDs7a0JBSWUsSyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9nZXQtaXRlcmF0b3JcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vaXMtaXRlcmFibGVcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vbWFwXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ25cIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5c1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9wcm9taXNlXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbFwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3JcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9wcm9taXNlID0gcmVxdWlyZShcIi4uL2NvcmUtanMvcHJvbWlzZVwiKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2VuID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gbmV3IF9wcm9taXNlMi5kZWZhdWx0KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIHN0ZXAoa2V5LCBhcmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgICAgICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHN0ZXAoXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBzdGVwKFwidGhyb3dcIiwgZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RlcChcIm5leHRcIik7XG4gICAgfSk7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmaW5lUHJvcGVydHkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKG9iaiwga2V5cykge1xuICB2YXIgdGFyZ2V0ID0ge307XG5cbiAgZm9yICh2YXIgaSBpbiBvYmopIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlO1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlO1xuICAgIHRhcmdldFtpXSA9IG9ialtpXTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2lzSXRlcmFibGUyID0gcmVxdWlyZShcIi4uL2NvcmUtanMvaXMtaXRlcmFibGVcIik7XG5cbnZhciBfaXNJdGVyYWJsZTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc0l0ZXJhYmxlMik7XG5cbnZhciBfZ2V0SXRlcmF0b3IyID0gcmVxdWlyZShcIi4uL2NvcmUtanMvZ2V0LWl0ZXJhdG9yXCIpO1xuXG52YXIgX2dldEl0ZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldEl0ZXJhdG9yMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHtcbiAgICB2YXIgX2FyciA9IFtdO1xuICAgIHZhciBfbiA9IHRydWU7XG4gICAgdmFyIF9kID0gZmFsc2U7XG4gICAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIF9pID0gKDAsIF9nZXRJdGVyYXRvcjMuZGVmYXVsdCkoYXJyKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9IHRydWU7XG4gICAgICBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzSXRlcmFibGUzLmRlZmF1bHQpKE9iamVjdChhcnIpKSkge1xuICAgICAgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG4gICAgfVxuICB9O1xufSgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2Zyb20gPSByZXF1aXJlKFwiLi4vY29yZS1qcy9hcnJheS9mcm9tXCIpO1xuXG52YXIgX2Zyb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZnJvbSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycjJbaV0gPSBhcnJbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICgwLCBfZnJvbTIuZGVmYXVsdCkoYXJyKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pdGVyYXRvciA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiKTtcblxudmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7XG5cbnZhciBfc3ltYm9sID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sXCIpO1xuXG52YXIgX3N5bWJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIF9pdGVyYXRvcjIuZGVmYXVsdCA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YoX2l0ZXJhdG9yMi5kZWZhdWx0KSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lXCIpO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5mcm9tOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3InKTsiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGUnKTsiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNy5tYXAudG8tanNvbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL19jb3JlJykuTWFwOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5hc3NpZ247IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyICRPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKXtcbiAgcmV0dXJuICRPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Qua2V5czsiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL19jb3JlJykuUHJvbWlzZTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlN5bWJvbDsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL193a3MtZXh0JykuZignaXRlcmF0b3InKTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKXtcbiAgaWYoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpe1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTsiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICBpZighaXNPYmplY3QoaXQpKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTsiLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyLCBJVEVSQVRPUil7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvTGVuZ3RoICA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgdG9JbmRleCAgID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oSVNfSU5DTFVERVMpe1xuICByZXR1cm4gZnVuY3Rpb24oJHRoaXMsIGVsLCBmcm9tSW5kZXgpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoJHRoaXMpXG4gICAgICAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKVxuICAgICAgLCBpbmRleCAgPSB0b0luZGV4KGZyb21JbmRleCwgbGVuZ3RoKVxuICAgICAgLCB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgaWYoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpd2hpbGUobGVuZ3RoID4gaW5kZXgpe1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgaWYodmFsdWUgIT0gdmFsdWUpcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjdG9JbmRleCBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKWlmKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pe1xuICAgICAgaWYoT1tpbmRleF0gPT09IGVsKXJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07IiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBJT2JqZWN0ICA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgYXNjICAgICAgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihUWVBFLCAkY3JlYXRlKXtcbiAgdmFyIElTX01BUCAgICAgICAgPSBUWVBFID09IDFcbiAgICAsIElTX0ZJTFRFUiAgICAgPSBUWVBFID09IDJcbiAgICAsIElTX1NPTUUgICAgICAgPSBUWVBFID09IDNcbiAgICAsIElTX0VWRVJZICAgICAgPSBUWVBFID09IDRcbiAgICAsIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDZcbiAgICAsIE5PX0hPTEVTICAgICAgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWFxuICAgICwgY3JlYXRlICAgICAgICA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24oJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpe1xuICAgIHZhciBPICAgICAgPSB0b09iamVjdCgkdGhpcylcbiAgICAgICwgc2VsZiAgID0gSU9iamVjdChPKVxuICAgICAgLCBmICAgICAgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMylcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IDBcbiAgICAgICwgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZFxuICAgICAgLCB2YWwsIHJlcztcbiAgICBmb3IoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKWlmKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpe1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYoVFlQRSl7XG4gICAgICAgIGlmKElTX01BUClyZXN1bHRbaW5kZXhdID0gcmVzOyAgICAgICAgICAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmKHJlcylzd2l0Y2goVFlQRSl7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZihJU19FVkVSWSlyZXR1cm4gZmFsc2U7ICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59OyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgaXNBcnJheSAgPSByZXF1aXJlKCcuL19pcy1hcnJheScpXG4gICwgU1BFQ0lFUyAgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsKXtcbiAgdmFyIEM7XG4gIGlmKGlzQXJyYXkob3JpZ2luYWwpKXtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZih0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpQyA9IHVuZGVmaW5lZDtcbiAgICBpZihpc09iamVjdChDKSl7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmKEMgPT09IG51bGwpQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07IiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbCwgbGVuZ3RoKXtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07IiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKVxuICAsIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXG4gIC8vIEVTMyB3cm9uZyBoZXJlXG4gICwgQVJHID0gY29mKGZ1bmN0aW9uKCl7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24oaXQsIGtleSl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTsiLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBjcmVhdGUgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJylcbiAgLCBjdHggICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgYW5JbnN0YW5jZSAgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpXG4gICwgZGVmaW5lZCAgICAgPSByZXF1aXJlKCcuL19kZWZpbmVkJylcbiAgLCBmb3JPZiAgICAgICA9IHJlcXVpcmUoJy4vX2Zvci1vZicpXG4gICwgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpXG4gICwgc3RlcCAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKVxuICAsIHNldFNwZWNpZXMgID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKVxuICAsIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsIGZhc3RLZXkgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXlcbiAgLCBTSVpFICAgICAgICA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24odGhhdCwga2V5KXtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KSwgZW50cnk7XG4gIGlmKGluZGV4ICE9PSAnRicpcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubil7XG4gICAgaWYoZW50cnkuayA9PSBrZXkpcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpe1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbih0aGF0LCBpdGVyYWJsZSl7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZihpdGVyYWJsZSAhPSB1bmRlZmluZWQpZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCl7XG4gICAgICAgIGZvcih2YXIgdGhhdCA9IHRoaXMsIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pe1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmKGVudHJ5LnApZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24oa2V5KXtcbiAgICAgICAgdmFyIHRoYXQgID0gdGhpc1xuICAgICAgICAgICwgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZihlbnRyeSl7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uXG4gICAgICAgICAgICAsIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmKHByZXYpcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZihuZXh0KW5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYodGhhdC5fZiA9PSBlbnRyeSl0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZih0aGF0Ll9sID09IGVudHJ5KXRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qLCB0aGF0ID0gdW5kZWZpbmVkICovKXtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGlzLCBDLCAnZm9yRWFjaCcpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMylcbiAgICAgICAgICAsIGVudHJ5O1xuICAgICAgICB3aGlsZShlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2Ype1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUoZW50cnkgJiYgZW50cnkucillbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSl7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYoREVTQ1JJUFRPUlMpZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gZGVmaW5lZCh0aGlzW1NJWkVdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbih0aGF0LCBrZXksIHZhbHVlKXtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpXG4gICAgICAsIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmKGVudHJ5KXtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmKCF0aGF0Ll9mKXRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmKHByZXYpcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmKGluZGV4ICE9PSAnRicpdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24oQywgTkFNRSwgSVNfTUFQKXtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuICAgICAgdGhpcy5fdCA9IGl0ZXJhdGVkOyAgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgdGhhdCAgPSB0aGlzXG4gICAgICAgICwga2luZCAgPSB0aGF0Ll9rXG4gICAgICAgICwgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZShlbnRyeSAmJiBlbnRyeS5yKWVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZighdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKXtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZihraW5kID09ICdrZXlzJyAgKXJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycgLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKVxuICAsIGZyb20gICAgPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUpe1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCl7XG4gICAgaWYoY2xhc3NvZih0aGlzKSAhPSBOQU1FKXRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgcmV0dXJuIGZyb20odGhpcyk7XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIG1ldGEgICAgICAgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpXG4gICwgZmFpbHMgICAgICAgICAgPSByZXF1aXJlKCcuL19mYWlscycpXG4gICwgaGlkZSAgICAgICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCByZWRlZmluZUFsbCAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpXG4gICwgZm9yT2YgICAgICAgICAgPSByZXF1aXJlKCcuL19mb3Itb2YnKVxuICAsIGFuSW5zdGFuY2UgICAgID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKVxuICAsIGlzT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCBkUCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBlYWNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKVxuICAsIERFU0NSSVBUT1JTICAgID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSyl7XG4gIHZhciBCYXNlICA9IGdsb2JhbFtOQU1FXVxuICAgICwgQyAgICAgPSBCYXNlXG4gICAgLCBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCdcbiAgICAsIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZVxuICAgICwgTyAgICAgPSB7fTtcbiAgaWYoIURFU0NSSVBUT1JTIHx8IHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uKCl7XG4gICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICB9KSkpe1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBDID0gd3JhcHBlcihmdW5jdGlvbih0YXJnZXQsIGl0ZXJhYmxlKXtcbiAgICAgIGFuSW5zdGFuY2UodGFyZ2V0LCBDLCBOQU1FLCAnX2MnKTtcbiAgICAgIHRhcmdldC5fYyA9IG5ldyBCYXNlO1xuICAgICAgaWYoaXRlcmFibGUgIT0gdW5kZWZpbmVkKWZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRhcmdldFtBRERFUl0sIHRhcmdldCk7XG4gICAgfSk7XG4gICAgZWFjaCgnYWRkLGNsZWFyLGRlbGV0ZSxmb3JFYWNoLGdldCxoYXMsc2V0LGtleXMsdmFsdWVzLGVudHJpZXMsdG9KU09OJy5zcGxpdCgnLCcpLGZ1bmN0aW9uKEtFWSl7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT0gJ2FkZCcgfHwgS0VZID09ICdzZXQnO1xuICAgICAgaWYoS0VZIGluIHByb3RvICYmICEoSVNfV0VBSyAmJiBLRVkgPT0gJ2NsZWFyJykpaGlkZShDLnByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGlzLCBDLCBLRVkpO1xuICAgICAgICBpZighSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpcmV0dXJuIEtFWSA9PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGZhbHNlO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY1tLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZignc2l6ZScgaW4gcHJvdG8pZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5fYy5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GLCBPKTtcblxuICBpZighSVNfV0VBSyljb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59OyIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7dmVyc2lvbjogJzIuNC4wJ307XG5pZih0eXBlb2YgX19lID09ICdudW1iZXInKV9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWYiLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjICAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBpbmRleCwgdmFsdWUpe1xuICBpZihpbmRleCBpbiBvYmplY3QpJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07IiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgdGhhdCwgbGVuZ3RoKXtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYodGhhdCA9PT0gdW5kZWZpbmVkKXJldHVybiBmbjtcbiAgc3dpdGNoKGxlbmd0aCl7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24oYSl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKC8qIC4uLmFyZ3MgKi8pe1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTsiLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ID09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07IiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50XG4gIC8vIGluIG9sZCBJRSB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0J1xuICAsIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59OyIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpOyIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BTICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKVxuICAsIHBJRSAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIHJlc3VsdCAgICAgPSBnZXRLZXlzKGl0KVxuICAgICwgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYoZ2V0U3ltYm9scyl7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KVxuICAgICAgLCBpc0VudW0gID0gcElFLmZcbiAgICAgICwgaSAgICAgICA9IDBcbiAgICAgICwga2V5O1xuICAgIHdoaWxlKHN5bWJvbHMubGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSlyZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59OyIsInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGNvcmUgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIGN0eCAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgaGlkZSAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgc291cmNlKXtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkZcbiAgICAsIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0LkdcbiAgICAsIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlNcbiAgICAsIElTX1BST1RPICA9IHR5cGUgJiAkZXhwb3J0LlBcbiAgICAsIElTX0JJTkQgICA9IHR5cGUgJiAkZXhwb3J0LkJcbiAgICAsIElTX1dSQVAgICA9IHR5cGUgJiAkZXhwb3J0LldcbiAgICAsIGV4cG9ydHMgICA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pXG4gICAgLCBleHBQcm90byAgPSBleHBvcnRzW1BST1RPVFlQRV1cbiAgICAsIHRhcmdldCAgICA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV1cbiAgICAsIGtleSwgb3duLCBvdXQ7XG4gIGlmKElTX0dMT0JBTClzb3VyY2UgPSBuYW1lO1xuICBmb3Ioa2V5IGluIHNvdXJjZSl7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZihvd24gJiYga2V5IGluIGV4cG9ydHMpY29udGludWU7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICA6IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKVxuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG4gICAgOiBJU19XUkFQICYmIHRhcmdldFtrZXldID09IG91dCA/IChmdW5jdGlvbihDKXtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24oYSwgYiwgYyl7XG4gICAgICAgIGlmKHRoaXMgaW5zdGFuY2VvZiBDKXtcbiAgICAgICAgICBzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQztcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYoSVNfUFJPVE8pe1xuICAgICAgKGV4cG9ydHMudmlydHVhbCB8fCAoZXhwb3J0cy52aXJ0dWFsID0ge30pKVtrZXldID0gb3V0O1xuICAgICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLnByb3RvdHlwZS4lTkFNRSVcbiAgICAgIGlmKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0paGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWAgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07IiwidmFyIGN0eCAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBjYWxsICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpXG4gICwgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJylcbiAgLCBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9MZW5ndGggICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGdldEl0ZXJGbiAgID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKVxuICAsIEJSRUFLICAgICAgID0ge31cbiAgLCBSRVRVUk4gICAgICA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1Ipe1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbigpeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpXG4gICAgLCBmICAgICAgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSlcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYoaXNBcnJheUl0ZXIoaXRlckZuKSlmb3IobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgKXtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLICA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZiA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZih0eXBlb2YgX19nID09ICdudW1iZXInKV9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwga2V5KXtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59OyIsInZhciBkUCAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsiLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7Z2V0OiBmdW5jdGlvbigpeyByZXR1cm4gNzsgfX0pLmEgIT0gNztcbn0pOyIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgYXJncywgdGhhdCl7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoKGFyZ3MubGVuZ3RoKXtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTsiLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTsiLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgSVRFUkFUT1IgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59OyIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpe1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59OyIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoKGUpe1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYocmV0ICE9PSB1bmRlZmluZWQpYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIGRlc2NyaXB0b3IgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCl7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwge25leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCl9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJylcbiAgLCBoaWRlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBJdGVyYXRvcnMgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgJGl0ZXJDcmVhdGUgICAgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJylcbiAgLCBJVEVSQVRPUiAgICAgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgQlVHR1kgICAgICAgICAgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSkgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICAsIEZGX0lURVJBVE9SICAgID0gJ0BAaXRlcmF0b3InXG4gICwgS0VZUyAgICAgICAgICAgPSAna2V5cydcbiAgLCBWQUxVRVMgICAgICAgICA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCl7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uKGtpbmQpe1xuICAgIGlmKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKXJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2goa2luZCl7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyAgICAgICAgPSBOQU1FICsgJyBJdGVyYXRvcidcbiAgICAsIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFU1xuICAgICwgVkFMVUVTX0JVRyA9IGZhbHNlXG4gICAgLCBwcm90byAgICAgID0gQmFzZS5wcm90b3R5cGVcbiAgICAsICRuYXRpdmUgICAgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF1cbiAgICAsICRkZWZhdWx0ICAgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKVxuICAgICwgJGVudHJpZXMgICA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWRcbiAgICAsICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlXG4gICAgLCBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmKCRhbnlOYXRpdmUpe1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKSk7XG4gICAgaWYoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpe1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmKCFMSUJSQVJZICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSloaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKXtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZigoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSl7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSAgPSByZXR1cm5UaGlzO1xuICBpZihERUZBVUxUKXtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiAgREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiAgICBJU19TRVQgICAgID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYoRk9SQ0VEKWZvcihrZXkgaW4gbWV0aG9kcyl7XG4gICAgICBpZighKGtleSBpbiBwcm90bykpcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTsiLCJ2YXIgSVRFUkFUT1IgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbigpeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbigpeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjLCBza2lwQ2xvc2luZyl7XG4gIGlmKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKXJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyICA9IFs3XVxuICAgICAgLCBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uKCl7IHJldHVybiB7ZG9uZTogc2FmZSA9IHRydWV9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbigpeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZG9uZSwgdmFsdWUpe1xuICByZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSB7fTsiLCJ2YXIgZ2V0S2V5cyAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBlbCl7XG4gIHZhciBPICAgICAgPSB0b0lPYmplY3Qob2JqZWN0KVxuICAgICwga2V5cyAgID0gZ2V0S2V5cyhPKVxuICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobGVuZ3RoID4gaW5kZXgpaWYoT1trZXkgPSBrZXlzW2luZGV4KytdXSA9PT0gZWwpcmV0dXJuIGtleTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlOyIsInZhciBNRVRBICAgICA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJylcbiAgLCBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgaGFzICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIHNldERlc2MgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZlxuICAsIGlkICAgICAgID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uKCl7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uKGl0KXtcbiAgc2V0RGVzYyhpdCwgTUVUQSwge3ZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfX0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24oaXQsIGNyZWF0ZSl7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYoIWlzT2JqZWN0KGl0KSlyZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZighaGFzKGl0LCBNRVRBKSl7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZighaXNFeHRlbnNpYmxlKGl0KSlyZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYoIWNyZWF0ZSlyZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uKGl0LCBjcmVhdGUpe1xuICBpZighaGFzKGl0LCBNRVRBKSl7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZighaXNFeHRlbnNpYmxlKGl0KSlyZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmKCFjcmVhdGUpcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbihpdCl7XG4gIGlmKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSlzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogICAgICBNRVRBLFxuICBORUVEOiAgICAgZmFsc2UsXG4gIGZhc3RLZXk6ICBmYXN0S2V5LFxuICBnZXRXZWFrOiAgZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59OyIsInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXRcbiAgLCBPYnNlcnZlciAgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlclxuICAsIHByb2Nlc3MgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgUHJvbWlzZSAgID0gZ2xvYmFsLlByb21pc2VcbiAgLCBpc05vZGUgICAgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbigpe1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKXBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUoaGVhZCl7XG4gICAgICBmbiAgID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgaWYoaGVhZClub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZihwYXJlbnQpcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZihpc05vZGUpe1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXJcbiAgfSBlbHNlIGlmKE9ic2VydmVyKXtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZVxuICAgICAgLCBub2RlICAgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHtjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKXtcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihmbil7XG4gICAgdmFyIHRhc2sgPSB7Zm46IGZuLCBuZXh0OiB1bmRlZmluZWR9O1xuICAgIGlmKGxhc3QpbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZighaGVhZCl7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBnZXRLZXlzICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BTICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJylcbiAgLCBwSUUgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKVxuICAsIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCBJT2JqZWN0ICA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsICRhc3NpZ24gID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgdmFyIEEgPSB7fVxuICAgICwgQiA9IHt9XG4gICAgLCBTID0gU3ltYm9sKClcbiAgICAsIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbihrKXsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKXsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCAgICAgPSB0b09iamVjdCh0YXJnZXQpXG4gICAgLCBhTGVuICA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGluZGV4ID0gMVxuICAgICwgZ2V0U3ltYm9scyA9IGdPUFMuZlxuICAgICwgaXNFbnVtICAgICA9IHBJRS5mO1xuICB3aGlsZShhTGVuID4gaW5kZXgpe1xuICAgIHZhciBTICAgICAgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSlcbiAgICAgICwga2V5cyAgID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKVxuICAgICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICAgLCBqICAgICAgPSAwXG4gICAgICAsIGtleTtcbiAgICB3aGlsZShsZW5ndGggPiBqKWlmKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpVFtrZXldID0gU1trZXldO1xuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247IiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGRQcyAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJylcbiAgLCBJRV9QUk9UTyAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKVxuICAsIEVtcHR5ICAgICAgID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfVxuICAsIFBST1RPVFlQRSAgID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24oKXtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJylcbiAgICAsIGkgICAgICA9IGVudW1CdWdLZXlzLmxlbmd0aFxuICAgICwgbHQgICAgID0gJzwnXG4gICAgLCBndCAgICAgPSAnPidcbiAgICAsIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlKGktLSlkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcyl7XG4gIHZhciByZXN1bHQ7XG4gIGlmKE8gIT09IG51bGwpe1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgZFAgICAgICAgICAgICAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKXtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmKElFOF9ET01fREVGSU5FKXRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIGlmKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcyl0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZigndmFsdWUnIGluIEF0dHJpYnV0ZXMpT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTsiLCJ2YXIgZFAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBnZXRLZXlzICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKXtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzICAgPSBnZXRLZXlzKFByb3BlcnRpZXMpXG4gICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICwgaSA9IDBcbiAgICAsIFA7XG4gIHdoaWxlKGxlbmd0aCA+IGkpZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59OyIsInZhciBwSUUgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKVxuICAsIGNyZWF0ZURlc2MgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgdG9JT2JqZWN0ICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIGdPUEQgICAgICAgICAgID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCl7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICBpZihoYXMoTywgUCkpcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTsiLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgZ09QTiAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mXG4gICwgdG9TdHJpbmcgID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbihpdCl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTsiLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzOyIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIHRvT2JqZWN0ICAgID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCBJRV9QUk9UTyAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKVxuICAsIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24oTyl7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYoaGFzKE8sIElFX1BST1RPKSlyZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3Ipe1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07IiwidmFyIGhhcyAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgdG9JT2JqZWN0ICAgID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSlcbiAgLCBJRV9QUk9UTyAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBuYW1lcyl7XG4gIHZhciBPICAgICAgPSB0b0lPYmplY3Qob2JqZWN0KVxuICAgICwgaSAgICAgID0gMFxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGtleTtcbiAgZm9yKGtleSBpbiBPKWlmKGtleSAhPSBJRV9QUk9UTyloYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpaWYoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKXtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59OyIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKVxuICAsIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTyl7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59OyIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlOyIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGNvcmUgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBmYWlscyAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBleGVjKXtcbiAgdmFyIGZuICA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXVxuICAgICwgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24oKXsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihiaXRtYXAsIHZhbHVlKXtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlICA6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlICAgIDogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZSAgICAgICA6IHZhbHVlXG4gIH07XG59OyIsInZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0YXJnZXQsIHNyYywgc2FmZSl7XG4gIGZvcih2YXIga2V5IGluIHNyYyl7XG4gICAgaWYoc2FmZSAmJiB0YXJnZXRba2V5XSl0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgaGlkZSh0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9IHJldHVybiB0YXJnZXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpOyIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBkUCAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpXG4gICwgU1BFQ0lFUyAgICAgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEtFWSl7XG4gIHZhciBDID0gdHlwZW9mIGNvcmVbS0VZXSA9PSAnZnVuY3Rpb24nID8gY29yZVtLRVldIDogZ2xvYmFsW0tFWV07XG4gIGlmKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59OyIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgaGFzID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgdGFnLCBzdGF0KXtcbiAgaWYoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSlkZWYoaXQsIFRBRywge2NvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZ30pO1xufTsiLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKVxuICAsIHVpZCAgICA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihrZXkpe1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTsiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJ1xuICAsIHN0b3JlICA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB7fSk7XG59OyIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpXG4gICwgU1BFQ0lFUyAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTywgRCl7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3IsIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07IiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIGRlZmluZWQgICA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFRPX1NUUklORyl7XG4gIHJldHVybiBmdW5jdGlvbih0aGF0LCBwb3Mpe1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpXG4gICAgICAsIGkgPSB0b0ludGVnZXIocG9zKVxuICAgICAgLCBsID0gcy5sZW5ndGhcbiAgICAgICwgYSwgYjtcbiAgICBpZihpIDwgMCB8fCBpID49IGwpcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07IiwidmFyIGN0eCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgaW52b2tlICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faW52b2tlJylcbiAgLCBodG1sICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19odG1sJylcbiAgLCBjZWwgICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJylcbiAgLCBnbG9iYWwgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgc2V0VGFzayAgICAgICAgICAgID0gZ2xvYmFsLnNldEltbWVkaWF0ZVxuICAsIGNsZWFyVGFzayAgICAgICAgICA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZVxuICAsIE1lc3NhZ2VDaGFubmVsICAgICA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbFxuICAsIGNvdW50ZXIgICAgICAgICAgICA9IDBcbiAgLCBxdWV1ZSAgICAgICAgICAgICAgPSB7fVxuICAsIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnXG4gICwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24oKXtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIGlmKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSl7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYoIXNldFRhc2sgfHwgIWNsZWFyVGFzayl7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pe1xuICAgIHZhciBhcmdzID0gW10sIGkgPSAxO1xuICAgIHdoaWxlKGFyZ3VtZW50cy5sZW5ndGggPiBpKWFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uKCl7XG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpe1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZihyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcycpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmKE1lc3NhZ2VDaGFubmVsKXtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsO1xuICAgIHBvcnQgICAgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKXtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZihPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbigpe1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogICBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59OyIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtYXggICAgICAgPSBNYXRoLm1heFxuICAsIG1pbiAgICAgICA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpbmRleCwgbGVuZ3RoKXtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07IiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCAgPSBNYXRoLmNlaWxcbiAgLCBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59OyIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0JylcbiAgLCBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07IiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07IiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59OyIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIFMpe1xuICBpZighaXNPYmplY3QoaXQpKXJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpcmV0dXJuIHZhbDtcbiAgaWYodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZighUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59OyIsInZhciBpZCA9IDBcbiAgLCBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59OyIsInZhciBnbG9iYWwgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgICAgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsIHdrc0V4dCAgICAgICAgID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpXG4gICwgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKXtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSlkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7dmFsdWU6IHdrc0V4dC5mKG5hbWUpfSk7XG59OyIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpOyIsInZhciBzdG9yZSAgICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpXG4gICwgdWlkICAgICAgICA9IHJlcXVpcmUoJy4vX3VpZCcpXG4gICwgU3ltYm9sICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbFxuICAsIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSl7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlOyIsInZhciBjbGFzc29mICAgPSByZXF1aXJlKCcuL19jbGFzc29mJylcbiAgLCBJVEVSQVRPUiAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ICE9IHVuZGVmaW5lZClyZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59OyIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgZ2V0ICAgICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3IgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBpdGVyRm4gPSBnZXQoaXQpO1xuICBpZih0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIHJldHVybiBhbk9iamVjdChpdGVyRm4uY2FsbChpdCkpO1xufTsiLCJ2YXIgY2xhc3NvZiAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgSVRFUkFUT1IgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmlzSXRlcmFibGUgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBPID0gT2JqZWN0KGl0KTtcbiAgcmV0dXJuIE9bSVRFUkFUT1JdICE9PSB1bmRlZmluZWRcbiAgICB8fCAnQEBpdGVyYXRvcicgaW4gT1xuICAgIHx8IEl0ZXJhdG9ycy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKE8pKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgdG9PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIGNhbGwgICAgICAgICAgID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJylcbiAgLCBpc0FycmF5SXRlciAgICA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKVxuICAsIHRvTGVuZ3RoICAgICAgID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpXG4gICwgZ2V0SXRlckZuICAgICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uKGl0ZXIpeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLyosIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKi8pe1xuICAgIHZhciBPICAgICAgID0gdG9PYmplY3QoYXJyYXlMaWtlKVxuICAgICAgLCBDICAgICAgID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheVxuICAgICAgLCBhTGVuICAgID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgLCBtYXBmbiAgID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICAgICwgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWRcbiAgICAgICwgaW5kZXggICA9IDBcbiAgICAgICwgaXRlckZuICA9IGdldEl0ZXJGbihPKVxuICAgICAgLCBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYobWFwcGluZyltYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKXtcbiAgICAgIGZvcihpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQzsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKXtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKVxuICAsIHN0ZXAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKVxuICAsIEl0ZXJhdG9ycyAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKVxuICAsIHRvSU9iamVjdCAgICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGtpbmQgID0gdGhpcy5fa1xuICAgICwgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKXtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZihraW5kID09ICd2YWx1ZXMnKXJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTsiLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoJ01hcCcsIGZ1bmN0aW9uKGdldCl7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKXsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KXtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSl7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpOyIsIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHthc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKX0pOyIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHtkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZn0pOyIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCAka2V5cyAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uKCl7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KXtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pOyIsIiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICAgICAgPSByZXF1aXJlKCcuL19saWJyYXJ5JylcbiAgLCBnbG9iYWwgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGN0eCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgY2xhc3NvZiAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgJGV4cG9ydCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBpc09iamVjdCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGFGdW5jdGlvbiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIGFuSW5zdGFuY2UgICAgICAgICA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJylcbiAgLCBmb3JPZiAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19mb3Itb2YnKVxuICAsIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKVxuICAsIHRhc2sgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXRcbiAgLCBtaWNyb3Rhc2sgICAgICAgICAgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpXG4gICwgUFJPTUlTRSAgICAgICAgICAgID0gJ1Byb21pc2UnXG4gICwgVHlwZUVycm9yICAgICAgICAgID0gZ2xvYmFsLlR5cGVFcnJvclxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgJFByb21pc2UgICAgICAgICAgID0gZ2xvYmFsW1BST01JU0VdXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBpc05vZGUgICAgICAgICAgICAgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJ1xuICAsIGVtcHR5ICAgICAgICAgICAgICA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH1cbiAgLCBJbnRlcm5hbCwgR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSAgICAgPSAkUHJvbWlzZS5yZXNvbHZlKDEpXG4gICAgICAsIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbihleGVjKXsgZXhlYyhlbXB0eSwgZW1wdHkpOyB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgc2FtZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24oYSwgYil7XG4gIC8vIHdpdGggbGlicmFyeSB3cmFwcGVyIHNwZWNpYWwgY2FzZVxuICByZXR1cm4gYSA9PT0gYiB8fCBhID09PSAkUHJvbWlzZSAmJiBiID09PSBXcmFwcGVyO1xufTtcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICByZXR1cm4gc2FtZUNvbnN0cnVjdG9yKCRQcm9taXNlLCBDKVxuICAgID8gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgOiBuZXcgR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IEdlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbigkJHJlc29sdmUsICQkcmVqZWN0KXtcbiAgICBpZihyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ICA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCAgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn07XG52YXIgcGVyZm9ybSA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIGV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4ge2Vycm9yOiBlfTtcbiAgfVxufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbihwcm9taXNlLCBpc1JlamVjdCl7XG4gIGlmKHByb21pc2UuX24pcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uKCl7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdlxuICAgICAgLCBvayAgICA9IHByb21pc2UuX3MgPT0gMVxuICAgICAgLCBpICAgICA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uKHJlYWN0aW9uKXtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWxcbiAgICAgICAgLCByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZVxuICAgICAgICAsIHJlamVjdCAgPSByZWFjdGlvbi5yZWplY3RcbiAgICAgICAgLCBkb21haW4gID0gcmVhY3Rpb24uZG9tYWluXG4gICAgICAgICwgcmVzdWx0LCB0aGVuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYoaGFuZGxlcil7XG4gICAgICAgICAgaWYoIW9rKXtcbiAgICAgICAgICAgIGlmKHByb21pc2UuX2ggPT0gMilvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihoYW5kbGVyID09PSB0cnVlKXJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYoZG9tYWluKWRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZihkb21haW4pZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKXtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpe1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpe1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3ZcbiAgICAgICwgYWJydXB0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmKGlzVW5oYW5kbGVkKHByb21pc2UpKXtcbiAgICAgIGFicnVwdCA9IHBlcmZvcm0oZnVuY3Rpb24oKXtcbiAgICAgICAgaWYoaXNOb2RlKXtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pe1xuICAgICAgICAgIGhhbmRsZXIoe3Byb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWV9KTtcbiAgICAgICAgfSBlbHNlIGlmKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3Ipe1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZihhYnJ1cHQpdGhyb3cgYWJydXB0LmVycm9yO1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcbiAgaWYocHJvbWlzZS5faCA9PSAxKXJldHVybiBmYWxzZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jXG4gICAgLCBpICAgICA9IDBcbiAgICAsIHJlYWN0aW9uO1xuICB3aGlsZShjaGFpbi5sZW5ndGggPiBpKXtcbiAgICByZWFjdGlvbiA9IGNoYWluW2krK107XG4gICAgaWYocmVhY3Rpb24uZmFpbCB8fCAhaXNVbmhhbmRsZWQocmVhY3Rpb24ucHJvbWlzZSkpcmV0dXJuIGZhbHNlO1xuICB9IHJldHVybiB0cnVlO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpe1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmKGlzTm9kZSl7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpe1xuICAgICAgaGFuZGxlcih7cHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92fSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZihwcm9taXNlLl9kKXJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZighcHJvbWlzZS5fYSlwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24odmFsdWUpe1xuICB2YXIgcHJvbWlzZSA9IHRoaXNcbiAgICAsIHRoZW47XG4gIGlmKHByb21pc2UuX2QpcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYocHJvbWlzZSA9PT0gdmFsdWUpdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKXtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbigpe1xuICAgICAgICB2YXIgd3JhcHBlciA9IHtfdzogcHJvbWlzZSwgX2Q6IGZhbHNlfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoKGUpe1xuICAgICRyZWplY3QuY2FsbCh7X3c6IHByb21pc2UsIF9kOiBmYWxzZX0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZighVVNFX05BVElWRSl7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcil7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2goZXJyKXtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKXtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuICAgICAgdmFyIHJlYWN0aW9uICAgID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayAgICAgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgICA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHRoaXMuX2EpdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHRoaXMuX3Mpbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHByb21pc2UgID0gbmV3IEludGVybmFsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCAgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHtQcm9taXNlOiAkUHJvbWlzZX0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKXtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpXG4gICAgICAsICQkcmVqZWN0ICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpe1xuICAgIC8vIGluc3RhbmNlb2YgaW5zdGVhZCBvZiBpbnRlcm5hbCBzbG90IGNoZWNrIGJlY2F1c2Ugd2Ugc2hvdWxkIGZpeCBpdCB3aXRob3V0IHJlcGxhY2VtZW50IG5hdGl2ZSBQcm9taXNlIGNvcmVcbiAgICBpZih4IGluc3RhbmNlb2YgJFByb21pc2UgJiYgc2FtZUNvbnN0cnVjdG9yKHguY29uc3RydWN0b3IsIHRoaXMpKXJldHVybiB4O1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcylcbiAgICAgICwgJCRyZXNvbHZlICA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICAkJHJlc29sdmUoeCk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uKGl0ZXIpe1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSl7XG4gICAgdmFyIEMgICAgICAgICAgPSB0aGlzXG4gICAgICAsIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgLCByZXNvbHZlICAgID0gY2FwYWJpbGl0eS5yZXNvbHZlXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgdmFyIHZhbHVlcyAgICA9IFtdXG4gICAgICAgICwgaW5kZXggICAgID0gMFxuICAgICAgICAsIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uKHByb21pc2Upe1xuICAgICAgICB2YXIgJGluZGV4ICAgICAgICA9IGluZGV4KytcbiAgICAgICAgICAsIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgICAgICBpZihhbHJlYWR5Q2FsbGVkKXJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkICA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZihhYnJ1cHQpcmVqZWN0KGFicnVwdC5lcnJvcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKXtcbiAgICB2YXIgQyAgICAgICAgICA9IHRoaXNcbiAgICAgICwgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbihwcm9taXNlKXtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYoYWJydXB0KXJlamVjdChhYnJ1cHQuZXJyb3IpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pOyIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24oaXRlcmF0ZWQpe1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbigpe1xuICB2YXIgTyAgICAgPSB0aGlzLl90XG4gICAgLCBpbmRleCA9IHRoaXMuX2lcbiAgICAsIHBvaW50O1xuICBpZihpbmRleCA+PSBPLmxlbmd0aClyZXR1cm4ge3ZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWV9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4ge3ZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2V9O1xufSk7IiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgREVTQ1JJUFRPUlMgICAgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKVxuICAsIE1FVEEgICAgICAgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWVxuICAsICRmYWlscyAgICAgICAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAsIHNoYXJlZCAgICAgICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCB1aWQgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3VpZCcpXG4gICwgd2tzICAgICAgICAgICAgPSByZXF1aXJlKCcuL193a3MnKVxuICAsIHdrc0V4dCAgICAgICAgID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpXG4gICwgd2tzRGVmaW5lICAgICAgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJylcbiAgLCBrZXlPZiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2tleW9mJylcbiAgLCBlbnVtS2V5cyAgICAgICA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpXG4gICwgaXNBcnJheSAgICAgICAgPSByZXF1aXJlKCcuL19pcy1hcnJheScpXG4gICwgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIHRvSU9iamVjdCAgICAgID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9QcmltaXRpdmUgICAgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKVxuICAsIGNyZWF0ZURlc2MgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgX2NyZWF0ZSAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJylcbiAgLCBnT1BORXh0ICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpXG4gICwgJEdPUEQgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpXG4gICwgJERQICAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsICRrZXlzICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIGdPUEQgICAgICAgICAgID0gJEdPUEQuZlxuICAsIGRQICAgICAgICAgICAgID0gJERQLmZcbiAgLCBnT1BOICAgICAgICAgICA9IGdPUE5FeHQuZlxuICAsICRTeW1ib2wgICAgICAgID0gZ2xvYmFsLlN5bWJvbFxuICAsICRKU09OICAgICAgICAgID0gZ2xvYmFsLkpTT05cbiAgLCBfc3RyaW5naWZ5ICAgICA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeVxuICAsIFBST1RPVFlQRSAgICAgID0gJ3Byb3RvdHlwZSdcbiAgLCBISURERU4gICAgICAgICA9IHdrcygnX2hpZGRlbicpXG4gICwgVE9fUFJJTUlUSVZFICAgPSB3a3MoJ3RvUHJpbWl0aXZlJylcbiAgLCBpc0VudW0gICAgICAgICA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlXG4gICwgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpXG4gICwgQWxsU3ltYm9scyAgICAgPSBzaGFyZWQoJ3N5bWJvbHMnKVxuICAsIE9QU3ltYm9scyAgICAgID0gc2hhcmVkKCdvcC1zeW1ib2xzJylcbiAgLCBPYmplY3RQcm90byAgICA9IE9iamVjdFtQUk9UT1RZUEVdXG4gICwgVVNFX05BVElWRSAgICAgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nXG4gICwgUU9iamVjdCAgICAgICAgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIGRQKHRoaXMsICdhJywge3ZhbHVlOiA3fSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbihpdCwga2V5LCBEKXtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmKHByb3RvRGVzYylkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbih0YWcpe1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKXtcbiAgaWYoaXQgPT09IE9iamVjdFByb3RvKSRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmKGhhcyhBbGxTeW1ib2xzLCBrZXkpKXtcbiAgICBpZighRC5lbnVtZXJhYmxlKXtcbiAgICAgIGlmKCFoYXMoaXQsIEhJRERFTikpZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSlpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHtlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKX0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApe1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSlcbiAgICAsIGkgICAgPSAwXG4gICAgLCBsID0ga2V5cy5sZW5ndGhcbiAgICAsIGtleTtcbiAgd2hpbGUobCA+IGkpJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCl7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KXtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSl7XG4gIGl0ICA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSlyZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKUQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpe1xuICB2YXIgbmFtZXMgID0gZ09QTih0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSl7XG4gICAgaWYoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKXJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCl7XG4gIHZhciBJU19PUCAgPSBpdCA9PT0gT2JqZWN0UHJvdG9cbiAgICAsIG5hbWVzICA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSl7XG4gICAgaWYoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKXJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYoIVVTRV9OQVRJVkUpe1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCl7XG4gICAgaWYodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICBpZih0aGlzID09PSBPYmplY3RQcm90bykkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZihoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKXRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKXNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywge2NvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0fSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpe1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgICA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mICA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZihERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKXtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24obmFtZSl7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfVxufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7U3ltYm9sOiAkU3ltYm9sfSk7XG5cbmZvcih2YXIgc3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBpID0gMDsgc3ltYm9scy5sZW5ndGggPiBpOyApd2tzKHN5bWJvbHNbaSsrXSk7XG5cbmZvcih2YXIgc3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGkgPSAwOyBzeW1ib2xzLmxlbmd0aCA+IGk7ICl3a3NEZWZpbmUoc3ltYm9sc1tpKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbihrZXkpe1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioa2V5KXtcbiAgICBpZihpc1N5bWJvbChrZXkpKXJldHVybiBrZXlPZihTeW1ib2xSZWdpc3RyeSwga2V5KTtcbiAgICB0aHJvdyBUeXBlRXJyb3Ioa2V5ICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24oKXsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbigpe1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7YTogU30pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCl7XG4gICAgaWYoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgdmFyIGFyZ3MgPSBbaXRdXG4gICAgICAsIGkgICAgPSAxXG4gICAgICAsIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYodHlwZW9mIHJlcGxhY2VyID09ICdmdW5jdGlvbicpJHJlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgaWYoJHJlcGxhY2VyIHx8ICFpc0FycmF5KHJlcGxhY2VyKSlyZXBsYWNlciA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuICAgICAgaWYoJHJlcGxhY2VyKXZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZighaXNTeW1ib2wodmFsdWUpKXJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywge3RvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpfSk7IiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7IiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7IiwicmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnbG9iYWwgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBoaWRlICAgICAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgSXRlcmF0b3JzICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgVE9fU1RSSU5HX1RBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IodmFyIGNvbGxlY3Rpb25zID0gWydOb2RlTGlzdCcsICdET01Ub2tlbkxpc3QnLCAnTWVkaWFMaXN0JywgJ1N0eWxlU2hlZXRMaXN0JywgJ0NTU1J1bGVMaXN0J10sIGkgPSAwOyBpIDwgNTsgaSsrKXtcbiAgdmFyIE5BTUUgICAgICAgPSBjb2xsZWN0aW9uc1tpXVxuICAgICwgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXVxuICAgICwgcHJvdG8gICAgICA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmKHByb3RvICYmICFwcm90b1tUT19TVFJJTkdfVEFHXSloaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgSXRlcmF0b3JzW05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufSIsIi8qIVxuICogbWkxOG4gLSBodHRwczovL2dpdGh1Yi5jb20vRHJhZ2dhYmxlL21pMThuXG4gKiBWZXJzaW9uOiAwLjMuM1xuICogQXV0aG9yOiBLZXZpbiBDaGFwcGVsbCA8a2V2aW4uYi5jaGFwcGVsbEBnbWFpbC5jb20+IChodHRwOi8va2V2aW4tY2hhcHBlbGwuY29tKVxuICovXG5tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHIpe2lmKGVbcl0pcmV0dXJuIGVbcl0uZXhwb3J0czt2YXIgbz1lW3JdPXtleHBvcnRzOnt9LGlkOnIsbG9hZGVkOiExfTtyZXR1cm4gdFtyXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxuKSxvLmxvYWRlZD0hMCxvLmV4cG9ydHN9dmFyIGU9e307cmV0dXJuIG4ubT10LG4uYz1lLG4ucD1cImRpc3QvXCIsbigwKX0oW2Z1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7XCJkZWZhdWx0XCI6dH19T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG89ZSg1NyksaT1yKG8pLHU9ZSg1MyksYz1yKHUpLGY9ZSg1NiksYT1yKGYpLHM9ZSg0OCksbD1yKHMpLHA9ZSg1NCksaD1yKHApLHY9ZSg1NSkseT1yKHYpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7KDAsaFtcImRlZmF1bHRcIl0pKHRoaXMsdCk7dmFyIG49e2V4dGVuc2lvbjpcIi5sYW5nXCIsbG9jYXRpb246XCJhc3NldHMvbGFuZy9cIixsYW5nczpbXCJlbi1VU1wiXSxsb2NhbGU6XCJlbi1VU1wiLHByZWxvYWRlZDp7fX0sZT10aGlzO2UuaW5pdD1mdW5jdGlvbih0KXtyZXR1cm4gZS5jb25maWc9KDAsbFtcImRlZmF1bHRcIl0pKHt9LG4sdCksZS5sYW5ncz0oMCxsW1wiZGVmYXVsdFwiXSkoe30sZS5jb25maWcucHJlbG9hZGVkKSxlLmxvY2FsZT1lLmNvbmZpZy5sb2NhbGV8fGUuY29uZmlnLmxhbmdzWzBdLGUuc2V0Q3VycmVudChlLmxvY2FsZSl9fXJldHVybigwLHlbXCJkZWZhdWx0XCJdKSh0LFt7a2V5OlwiZ2V0VmFsdWVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJlbnRbdF18fHR9fSx7a2V5OlwibWFrZVNhZmVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbj17XCJ7XCI6XCJcXFxce1wiLFwifVwiOlwiXFxcXH1cIixcInxcIjpcIlxcXFx8XCJ9O3JldHVybiB0PXQucmVwbGFjZSgvXFx7fFxcfXxcXHwvZyxmdW5jdGlvbih0KXtyZXR1cm4gblt0XX0pLG5ldyBSZWdFeHAodCxcImdcIil9fSx7a2V5OlwicHV0XCIsdmFsdWU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5jdXJyZW50W3RdPW59fSx7a2V5OlwiZ2V0XCIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLHI9dGhpcy5nZXRWYWx1ZSh0KSxvPXIubWF0Y2goL1xce1teXFx9XSs/XFx9L2cpLGk9dm9pZCAwO2lmKG4mJm8paWYoXCJvYmplY3RcIj09PShcInVuZGVmaW5lZFwiPT10eXBlb2Ygbj9cInVuZGVmaW5lZFwiOigwLGFbXCJkZWZhdWx0XCJdKShuKSkpZm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1KyspaT1vW3VdLnN1YnN0cmluZygxLG9bdV0ubGVuZ3RoLTEpLHI9ci5yZXBsYWNlKGUubWFrZVNhZmUob1t1XSksbltpXXx8XCJcIik7ZWxzZSByPXIucmVwbGFjZSgvXFx7W15cXH1dKz9cXH0vZyxuKTtyZXR1cm4gcn19LHtrZXk6XCJmcm9tRmlsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPXQuc3BsaXQoXCJcXG5cIikscj17fSxvPTA7bzxlLmxlbmd0aDtvKyspaWYobj1lW29dLm1hdGNoKC9eKC4rPykgKj89ICo/KFteXFxuXSspLykpe3ZhciBpPW5bMl0ucmVwbGFjZSgvXlxccyt8XFxzKyQvLFwiXCIpO3JbblsxXV09aX1yZXR1cm4gcn19LHtrZXk6XCJwcm9jZXNzRmlsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXQucmVwbGFjZSgvXFxuXFxuL2csXCJcXG5cIik7cmV0dXJuIHRoaXMuZnJvbUZpbGUobil9fSx7a2V5OlwibG9hZExhbmdcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgd2luZG93LlByb21pc2UoZnVuY3Rpb24oZSxyKXtuLmxhbmdzW3RdP2Uobi5sYW5nc1t0XSk6IWZ1bmN0aW9uKCl7dmFyIG89bmV3IFhNTEh0dHBSZXF1ZXN0LGk9bi5jb25maWcubG9jYXRpb24rdCtuLmNvbmZpZy5leHRlbnNpb247by5vcGVuKFwiR0VUXCIsaSwhMCksby5vbmxvYWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXR1czw9MzA0KXt2YXIgaT1uLnByb2Nlc3NGaWxlKG8ucmVzcG9uc2VUZXh0KTtuLmxhbmdzW3RdPWksZShpKX1lbHNlIHIoe3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Om8uc3RhdHVzVGV4dH0pfSxvLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpvLnN0YXR1c1RleHR9KX0sby5zZW5kKCl9KCl9KX19LHtrZXk6XCJzZXRDdXJyZW50XCIsdmFsdWU6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgbj0oMCxjW1wiZGVmYXVsdFwiXSkoaVtcImRlZmF1bHRcIl0ubWFyayhmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlwiZW4tVVNcIjtyZXR1cm4gaVtcImRlZmF1bHRcIl0ud3JhcChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gbi5uZXh0PTIsdGhpcy5sb2FkTGFuZyh0KTtjYXNlIDI6cmV0dXJuIHRoaXMubG9jYWxlPXQsdGhpcy5jdXJyZW50PXRoaXMubGFuZ3NbdF0sbi5hYnJ1cHQoXCJyZXR1cm5cIix0aGlzLmN1cnJlbnQpO2Nhc2UgNTpjYXNlXCJlbmRcIjpyZXR1cm4gbi5zdG9wKCl9fSxlLHRoaXMpfSkpO3JldHVybiB0fSgpfSx7a2V5OlwiZ2V0TGFuZ3NcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWcubGFuZ3N9fV0pLHR9KCk7bltcImRlZmF1bHRcIl09bmV3IGR9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI4KShcIndrc1wiKSxvPWUoMjEpLGk9ZSgyKS5TeW1ib2wsdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpLGM9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByW3RdfHwoclt0XT11JiZpW3RdfHwodT9pOm8pKFwiU3ltYm9sLlwiK3QpKX07Yy5zdG9yZT1yfSxmdW5jdGlvbih0LG4pe3ZhciBlPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPWUpfSxmdW5jdGlvbih0LG4pe3ZhciBlPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNC4wXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9ZSl9LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9IWUoMTIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg2KSxvPWUoMzUpLGk9ZSgzMCksdT1PYmplY3QuZGVmaW5lUHJvcGVydHk7bi5mPWUoNCk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsbixlKXtpZihyKHQpLG49aShuLCEwKSxyKGUpLG8pdHJ5e3JldHVybiB1KHQsbixlKX1jYXRjaChjKXt9aWYoXCJnZXRcImluIGV8fFwic2V0XCJpbiBlKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiBlJiYodFtuXT1lLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbil7dmFyIGU9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNSksbz1lKDE5KTt0LmV4cG9ydHM9ZSg0KT9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIuZih0LG4sbygxLGUpKX06ZnVuY3Rpb24odCxuLGUpe3JldHVybiB0W25dPWUsdH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDM2KSxvPWUoMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcihvKHQpKX19LGZ1bmN0aW9uKHQsbil7dmFyIGU9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKSxvPWUoMyksaT1lKDE2KSx1PWUoOCksYz1cInByb3RvdHlwZVwiLGY9ZnVuY3Rpb24odCxuLGUpe3ZhciBhLHMsbCxwPXQmZi5GLGg9dCZmLkcsdj10JmYuUyx5PXQmZi5QLGQ9dCZmLkIsZz10JmYuVyxtPWg/bzpvW25dfHwob1tuXT17fSksdz1tW2NdLHg9aD9yOnY/cltuXToocltuXXx8e30pW2NdO2gmJihlPW4pO2ZvcihhIGluIGUpcz0hcCYmeCYmdm9pZCAwIT09eFthXSxzJiZhIGluIG18fChsPXM/eFthXTplW2FdLG1bYV09aCYmXCJmdW5jdGlvblwiIT10eXBlb2YgeFthXT9lW2FdOmQmJnM/aShsLHIpOmcmJnhbYV09PWw/ZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24obixlLHIpe2lmKHRoaXMgaW5zdGFuY2VvZiB0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KG4pO2Nhc2UgMjpyZXR1cm4gbmV3IHQobixlKX1yZXR1cm4gbmV3IHQobixlLHIpfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIG5bY109dFtjXSxufShsKTp5JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBsP2koRnVuY3Rpb24uY2FsbCxsKTpsLHkmJigobS52aXJ0dWFsfHwobS52aXJ0dWFsPXt9KSlbYV09bCx0JmYuUiYmdyYmIXdbYV0mJnUodyxhLGwpKSl9O2YuRj0xLGYuRz0yLGYuUz00LGYuUD04LGYuQj0xNixmLlc9MzIsZi5VPTY0LGYuUj0xMjgsdC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChuKXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9e319LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDQwKSxvPWUoMjUpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe2lmKHIodCksdm9pZCAwPT09bilyZXR1cm4gdDtzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKG4sZSl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jYWxsKG4sZSxyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHQuY2FsbChuLGUscixvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPSEwfSxmdW5jdGlvbih0LG4pe24uZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6bn19fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg1KS5mLG89ZSg3KSxpPWUoMSkoXCJ0b1N0cmluZ1RhZ1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3QmJiFvKHQ9ZT90OnQucHJvdG90eXBlLGkpJiZyKHQsaSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm59KX19LGZ1bmN0aW9uKHQsbil7dmFyIGU9MCxyPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrZStyKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PXQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiK3QpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTMpLG89ZSgyKS5kb2N1bWVudCxpPXIobykmJnIoby5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGk/by5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9XCJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2ZcIi5zcGxpdChcIixcIil9LGZ1bmN0aW9uKHQsbil7bi5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI4KShcImtleXNcIiksbz1lKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHJbdF18fChyW3RdPW8odCkpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMiksbz1cIl9fY29yZS1qc19zaGFyZWRfX1wiLGk9cltvXXx8KHJbb109e30pO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XXx8KGlbdF09e30pfX0sZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLmNlaWwscj1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP3I6ZSkodCl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIXIodCkpcmV0dXJuIHQ7dmFyIGUsbztpZihuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihlPXQudG9TdHJpbmcpJiYhcihvPWUuY2FsbCh0KSkpcmV0dXJuIG87aWYoXCJmdW5jdGlvblwiPT10eXBlb2YoZT10LnZhbHVlT2YpJiYhcihvPWUuY2FsbCh0KSkpcmV0dXJuIG87aWYoIW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9dC50b1N0cmluZykmJiFyKG89ZS5jYWxsKHQpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKSxvPWUoMyksaT1lKDE3KSx1PWUoMzIpLGM9ZSg1KS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1vLlN5bWJvbHx8KG8uU3ltYm9sPWk/e306ci5TeW1ib2x8fHt9KTtcIl9cIj09dC5jaGFyQXQoMCl8fHQgaW4gbnx8YyhuLHQse3ZhbHVlOnUuZih0KX0pfX0sZnVuY3Rpb24odCxuLGUpe24uZj1lKDEpfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMCksbz1lKDEpKFwidG9TdHJpbmdUYWdcIiksaT1cIkFyZ3VtZW50c1wiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksdT1mdW5jdGlvbih0LG4pe3RyeXtyZXR1cm4gdFtuXX1jYXRjaChlKXt9fTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG4sZSxjO3JldHVybiB2b2lkIDA9PT10P1wiVW5kZWZpbmVkXCI6bnVsbD09PXQ/XCJOdWxsXCI6XCJzdHJpbmdcIj09dHlwZW9mKGU9dShuPU9iamVjdCh0KSxvKSk/ZTppP3Iobik6XCJPYmplY3RcIj09KGM9cihuKSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4uY2FsbGVlP1wiQXJndW1lbnRzXCI6Y319LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSgyKS5kb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPSFlKDQpJiYhZSgxMikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUoMjQpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEwKTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09cih0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDE3KSxvPWUoMTEpLGk9ZSg0MSksdT1lKDgpLGM9ZSg3KSxmPWUoMTQpLGE9ZSg3Mikscz1lKDIwKSxsPWUoODIpLHA9ZSgxKShcIml0ZXJhdG9yXCIpLGg9IShbXS5rZXlzJiZcIm5leHRcImluW10ua2V5cygpKSx2PVwiQEBpdGVyYXRvclwiLHk9XCJrZXlzXCIsZD1cInZhbHVlc1wiLGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLG0sdyx4LGIpe2EoZSxuLG0pO3ZhciBfLE8saixTPWZ1bmN0aW9uKHQpe2lmKCFoJiZ0IGluIGspcmV0dXJuIGtbdF07c3dpdGNoKHQpe2Nhc2UgeTpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcyx0KX07Y2FzZSBkOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcyx0KX19LEU9bitcIiBJdGVyYXRvclwiLFQ9dz09ZCxQPSExLGs9dC5wcm90b3R5cGUsTD1rW3BdfHxrW3ZdfHx3JiZrW3ddLE09THx8Uyh3KSxGPXc/VD9TKFwiZW50cmllc1wiKTpNOnZvaWQgMCxOPVwiQXJyYXlcIj09bj9rLmVudHJpZXN8fEw6TDtpZihOJiYoaj1sKE4uY2FsbChuZXcgdCkpLGohPT1PYmplY3QucHJvdG90eXBlJiYocyhqLEUsITApLHJ8fGMoaixwKXx8dShqLHAsZykpKSxUJiZMJiZMLm5hbWUhPT1kJiYoUD0hMCxNPWZ1bmN0aW9uKCl7cmV0dXJuIEwuY2FsbCh0aGlzKX0pLHImJiFifHwhaCYmIVAmJmtbcF18fHUoayxwLE0pLGZbbl09TSxmW0VdPWcsdylpZihfPXt2YWx1ZXM6VD9NOlMoZCksa2V5czp4P006Uyh5KSxlbnRyaWVzOkZ9LGIpZm9yKE8gaW4gXylPIGluIGt8fGkoayxPLF9bT10pO2Vsc2UgbyhvLlArby5GKihofHxQKSxuLF8pO3JldHVybiBffX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNiksbz1lKDc5KSxpPWUoMjUpLHU9ZSgyNykoXCJJRV9QUk9UT1wiKSxjPWZ1bmN0aW9uKCl7fSxmPVwicHJvdG90eXBlXCIsYT1mdW5jdGlvbigpe3ZhciB0LG49ZSgyNCkoXCJpZnJhbWVcIikscj1pLmxlbmd0aCxvPVwiPFwiLHU9XCI+XCI7Zm9yKG4uc3R5bGUuZGlzcGxheT1cIm5vbmVcIixlKDM0KS5hcHBlbmRDaGlsZChuKSxuLnNyYz1cImphdmFzY3JpcHQ6XCIsdD1uLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsdC5vcGVuKCksdC53cml0ZShvK1wic2NyaXB0XCIrdStcImRvY3VtZW50LkY9T2JqZWN0XCIrbytcIi9zY3JpcHRcIit1KSx0LmNsb3NlKCksYT10LkY7ci0tOylkZWxldGUgYVtmXVtpW3JdXTtyZXR1cm4gYSgpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxuKXt2YXIgZTtyZXR1cm4gbnVsbCE9PXQ/KGNbZl09cih0KSxlPW5ldyBjLGNbZl09bnVsbCxlW3VdPXQpOmU9YSgpLHZvaWQgMD09PW4/ZTpvKGUsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg0MCksbz1lKDI1KS5jb25jYXQoXCJsZW5ndGhcIixcInByb3RvdHlwZVwiKTtuLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbyl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg3KSxvPWUoOSksaT1lKDY1KSghMSksdT1lKDI3KShcIklFX1BST1RPXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlLGM9byh0KSxmPTAsYT1bXTtmb3IoZSBpbiBjKWUhPXUmJnIoYyxlKSYmYS5wdXNoKGUpO2Zvcig7bi5sZW5ndGg+ZjspcihjLGU9bltmKytdKSYmKH5pKGEsZSl8fGEucHVzaChlKSk7cmV0dXJuIGF9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPWUoOCl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcixvLGksdT1lKDE2KSxjPWUoNjgpLGY9ZSgzNCksYT1lKDI0KSxzPWUoMiksbD1zLnByb2Nlc3MscD1zLnNldEltbWVkaWF0ZSxoPXMuY2xlYXJJbW1lZGlhdGUsdj1zLk1lc3NhZ2VDaGFubmVsLHk9MCxkPXt9LGc9XCJvbnJlYWR5c3RhdGVjaGFuZ2VcIixtPWZ1bmN0aW9uKCl7dmFyIHQ9K3RoaXM7aWYoZC5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIG49ZFt0XTtkZWxldGUgZFt0XSxuKCl9fSx3PWZ1bmN0aW9uKHQpe20uY2FsbCh0LmRhdGEpfTtwJiZofHwocD1mdW5jdGlvbih0KXtmb3IodmFyIG49W10sZT0xO2FyZ3VtZW50cy5sZW5ndGg+ZTspbi5wdXNoKGFyZ3VtZW50c1tlKytdKTtyZXR1cm4gZFsrK3ldPWZ1bmN0aW9uKCl7YyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6RnVuY3Rpb24odCksbil9LHIoeSkseX0saD1mdW5jdGlvbih0KXtkZWxldGUgZFt0XX0sXCJwcm9jZXNzXCI9PWUoMTApKGwpP3I9ZnVuY3Rpb24odCl7bC5uZXh0VGljayh1KG0sdCwxKSl9OnY/KG89bmV3IHYsaT1vLnBvcnQyLG8ucG9ydDEub25tZXNzYWdlPXcscj11KGkucG9zdE1lc3NhZ2UsaSwxKSk6cy5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIXMuaW1wb3J0U2NyaXB0cz8ocj1mdW5jdGlvbih0KXtzLnBvc3RNZXNzYWdlKHQrXCJcIixcIipcIil9LHMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIix3LCExKSk6cj1nIGluIGEoXCJzY3JpcHRcIik/ZnVuY3Rpb24odCl7Zi5hcHBlbmRDaGlsZChhKFwic2NyaXB0XCIpKVtnXT1mdW5jdGlvbigpe2YucmVtb3ZlQ2hpbGQodGhpcyksbS5jYWxsKHQpfX06ZnVuY3Rpb24odCl7c2V0VGltZW91dCh1KG0sdCwxKSwwKX0pLHQuZXhwb3J0cz17c2V0OnAsY2xlYXI6aH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI5KSxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP28ocih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHIodCkpfX0sZnVuY3Rpb24odCxuKXt9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDg2KSghMCk7ZSgzNykoU3RyaW5nLFwiU3RyaW5nXCIsZnVuY3Rpb24odCl7dGhpcy5fdD1TdHJpbmcodCksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciB0LG49dGhpcy5fdCxlPXRoaXMuX2k7cmV0dXJuIGU+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9cihuLGUpLHRoaXMuX2krPXQubGVuZ3RoLHt2YWx1ZTp0LGRvbmU6ITF9KX0pfSxmdW5jdGlvbih0LG4sZSl7ZSg4OSk7Zm9yKHZhciByPWUoMiksbz1lKDgpLGk9ZSgxNCksdT1lKDEpKFwidG9TdHJpbmdUYWdcIiksYz1bXCJOb2RlTGlzdFwiLFwiRE9NVG9rZW5MaXN0XCIsXCJNZWRpYUxpc3RcIixcIlN0eWxlU2hlZXRMaXN0XCIsXCJDU1NSdWxlTGlzdFwiXSxmPTA7Zjw1O2YrKyl7dmFyIGE9Y1tmXSxzPXJbYV0sbD1zJiZzLnByb3RvdHlwZTtsJiYhbFt1XSYmbyhsLHUsYSksaVthXT1pLkFycmF5fX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz17XCJkZWZhdWx0XCI6ZSg1OCksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9e1wiZGVmYXVsdFwiOmUoNTkpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPXtcImRlZmF1bHRcIjplKDYwKSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz17XCJkZWZhdWx0XCI6ZSg2MSksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9e1wiZGVmYXVsdFwiOmUoNjIpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e1wiZGVmYXVsdFwiOnR9fW4uX19lc01vZHVsZT0hMDt2YXIgbz1lKDUwKSxpPXIobyk7bltcImRlZmF1bHRcIl09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG5ldyBpW1wiZGVmYXVsdFwiXShmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIobyx1KXt0cnl7dmFyIGM9bltvXSh1KSxmPWMudmFsdWV9Y2F0Y2goYSl7cmV0dXJuIHZvaWQgZShhKX1yZXR1cm4gYy5kb25lP3ZvaWQgdChmKTppW1wiZGVmYXVsdFwiXS5yZXNvbHZlKGYpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHIoXCJuZXh0XCIsdCl9LGZ1bmN0aW9uKHQpe3JldHVybiByKFwidGhyb3dcIix0KX0pfXJldHVybiByKFwibmV4dFwiKX0pfX19LGZ1bmN0aW9uKHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5fX2VzTW9kdWxlPSEwLG5bXCJkZWZhdWx0XCJdPWZ1bmN0aW9uKHQsbil7aWYoISh0IGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7XCJkZWZhdWx0XCI6dH19bi5fX2VzTW9kdWxlPSEwO3ZhciBvPWUoNDkpLGk9cihvKTtuW1wiZGVmYXVsdFwiXT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxuKXtmb3IodmFyIGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHI9bltlXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksKDAsaVtcImRlZmF1bHRcIl0pKHQsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihuLGUscil7cmV0dXJuIGUmJnQobi5wcm90b3R5cGUsZSksciYmdChuLHIpLG59fSgpfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e1wiZGVmYXVsdFwiOnR9fW4uX19lc01vZHVsZT0hMDt2YXIgbz1lKDUyKSxpPXIobyksdT1lKDUxKSxjPXIodSksZj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjW1wiZGVmYXVsdFwiXSYmXCJzeW1ib2xcIj09dHlwZW9mIGlbXCJkZWZhdWx0XCJdP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNbXCJkZWZhdWx0XCJdJiZ0LmNvbnN0cnVjdG9yPT09Y1tcImRlZmF1bHRcIl0/XCJzeW1ib2xcIjp0eXBlb2YgdH07bltcImRlZmF1bHRcIl09XCJmdW5jdGlvblwiPT10eXBlb2YgY1tcImRlZmF1bHRcIl0mJlwic3ltYm9sXCI9PT1mKGlbXCJkZWZhdWx0XCJdKT9mdW5jdGlvbih0KXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgdD9cInVuZGVmaW5lZFwiOmYodCl9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjW1wiZGVmYXVsdFwiXSYmdC5jb25zdHJ1Y3Rvcj09PWNbXCJkZWZhdWx0XCJdP1wic3ltYm9sXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIHQ/XCJ1bmRlZmluZWRcIjpmKHQpfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz1lKDk3KX0sZnVuY3Rpb24odCxuLGUpe2UoOTApLHQuZXhwb3J0cz1lKDMpLk9iamVjdC5hc3NpZ259LGZ1bmN0aW9uKHQsbixlKXtlKDkxKTt2YXIgcj1lKDMpLk9iamVjdDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3JldHVybiByLmRlZmluZVByb3BlcnR5KHQsbixlKX19LGZ1bmN0aW9uKHQsbixlKXtlKDQ1KSxlKDQ2KSxlKDQ3KSxlKDkyKSx0LmV4cG9ydHM9ZSgzKS5Qcm9taXNlfSxmdW5jdGlvbih0LG4sZSl7ZSg5MyksZSg0NSksZSg5NCksZSg5NSksdC5leHBvcnRzPWUoMykuU3ltYm9sfSxmdW5jdGlvbih0LG4sZSl7ZSg0NiksZSg0NyksdC5leHBvcnRzPWUoMzIpLmYoXCJpdGVyYXRvclwiKX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSxyKXtpZighKHQgaW5zdGFuY2VvZiBuKXx8dm9pZCAwIT09ciYmciBpbiB0KXRocm93IFR5cGVFcnJvcihlK1wiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg5KSxvPWUoNDMpLGk9ZSg4Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLGUsdSl7dmFyIGMsZj1yKG4pLGE9byhmLmxlbmd0aCkscz1pKHUsYSk7aWYodCYmZSE9ZSl7Zm9yKDthPnM7KWlmKGM9ZltzKytdLGMhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO2E+cztzKyspaWYoKHR8fHMgaW4gZikmJmZbc109PT1lKXJldHVybiB0fHxzfHwwO3JldHVybiF0JiYtMX19fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNSksbz1lKDI2KSxpPWUoMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1yKHQpLGU9by5mO2lmKGUpZm9yKHZhciB1LGM9ZSh0KSxmPWkuZixhPTA7Yy5sZW5ndGg+YTspZi5jYWxsKHQsdT1jW2ErK10pJiZuLnB1c2godSk7cmV0dXJuIG59fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNiksbz1lKDcxKSxpPWUoNjkpLHU9ZSg2KSxjPWUoNDMpLGY9ZSg4OCksYT17fSxzPXt9LG49dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLGwscCl7dmFyIGgsdix5LGQsZz1wP2Z1bmN0aW9uKCl7cmV0dXJuIHR9OmYodCksbT1yKGUsbCxuPzI6MSksdz0wO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGcpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGl0ZXJhYmxlIVwiKTtpZihpKGcpKXtmb3IoaD1jKHQubGVuZ3RoKTtoPnc7dysrKWlmKGQ9bj9tKHUodj10W3ddKVswXSx2WzFdKTptKHRbd10pLGQ9PT1hfHxkPT09cylyZXR1cm4gZH1lbHNlIGZvcih5PWcuY2FsbCh0KTshKHY9eS5uZXh0KCkpLmRvbmU7KWlmKGQ9byh5LG0sdi52YWx1ZSxuKSxkPT09YXx8ZD09PXMpcmV0dXJuIGR9O24uQlJFQUs9YSxuLlJFVFVSTj1zfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7dmFyIHI9dm9pZCAwPT09ZTtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcj90KCk6dC5jYWxsKGUpO2Nhc2UgMTpyZXR1cm4gcj90KG5bMF0pOnQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gcj90KG5bMF0sblsxXSk6dC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHI/dChuWzBdLG5bMV0sblsyXSk6dC5jYWxsKGUsblswXSxuWzFdLG5bMl0pO2Nhc2UgNDpyZXR1cm4gcj90KG5bMF0sblsxXSxuWzJdLG5bM10pOnQuY2FsbChlLG5bMF0sblsxXSxuWzJdLG5bM10pfXJldHVybiB0LmFwcGx5KGUsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNCksbz1lKDEpKFwiaXRlcmF0b3JcIiksaT1BcnJheS5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10JiYoci5BcnJheT09PXR8fGlbb109PT10KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEwKTt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJBcnJheVwiPT1yKHQpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLG8pe3RyeXtyZXR1cm4gbz9uKHIoZSlbMF0sZVsxXSk6bihlKX1jYXRjaChpKXt2YXIgdT10W1wicmV0dXJuXCJdO3Rocm93IHZvaWQgMCE9PXUmJnIodS5jYWxsKHQpKSxpfX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDM4KSxvPWUoMTkpLGk9ZSgyMCksdT17fTtlKDgpKHUsZSgxKShcIml0ZXJhdG9yXCIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3QucHJvdG90eXBlPXIodSx7bmV4dDpvKDEsZSl9KSxpKHQsbitcIiBJdGVyYXRvclwiKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEpKFwiaXRlcmF0b3JcIiksbz0hMTt0cnl7dmFyIGk9WzddW3JdKCk7aVtcInJldHVyblwiXT1mdW5jdGlvbigpe289ITB9LEFycmF5LmZyb20oaSxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaCh1KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIW4mJiFvKXJldHVybiExO3ZhciBlPSExO3RyeXt2YXIgaT1bN10sdT1pW3JdKCk7dS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ZT0hMH19LGlbcl09ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdChpKX1jYXRjaChjKXt9cmV0dXJuIGV9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybnt2YWx1ZTpuLGRvbmU6ISF0fX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE1KSxvPWUoOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLGk9byh0KSx1PXIoaSksYz11Lmxlbmd0aCxmPTA7Yz5mOylpZihpW2U9dVtmKytdXT09PW4pcmV0dXJuIGV9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyMSkoXCJtZXRhXCIpLG89ZSgxMyksaT1lKDcpLHU9ZSg1KS5mLGM9MCxmPU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LGE9IWUoMTIpKGZ1bmN0aW9uKCl7cmV0dXJuIGYoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSxzPWZ1bmN0aW9uKHQpe3UodCxyLHt2YWx1ZTp7aTpcIk9cIisgKytjLHc6e319fSl9LGw9ZnVuY3Rpb24odCxuKXtpZighbyh0KSlyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdD90OihcInN0cmluZ1wiPT10eXBlb2YgdD9cIlNcIjpcIlBcIikrdDtpZighaSh0LHIpKXtpZighZih0KSlyZXR1cm5cIkZcIjtpZighbilyZXR1cm5cIkVcIjtzKHQpfXJldHVybiB0W3JdLml9LHA9ZnVuY3Rpb24odCxuKXtpZighaSh0LHIpKXtpZighZih0KSlyZXR1cm4hMDtpZighbilyZXR1cm4hMTtzKHQpfXJldHVybiB0W3JdLnd9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIGEmJnYuTkVFRCYmZih0KSYmIWkodCxyKSYmcyh0KSx0fSx2PXQuZXhwb3J0cz17S0VZOnIsTkVFRDohMSxmYXN0S2V5OmwsZ2V0V2VhazpwLG9uRnJlZXplOmh9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKSxvPWUoNDIpLnNldCxpPXIuTXV0YXRpb25PYnNlcnZlcnx8ci5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLHU9ci5wcm9jZXNzLGM9ci5Qcm9taXNlLGY9XCJwcm9jZXNzXCI9PWUoMTApKHUpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LG4sZSxhPWZ1bmN0aW9uKCl7dmFyIHIsbztmb3IoZiYmKHI9dS5kb21haW4pJiZyLmV4aXQoKTt0Oyl7bz10LmZuLHQ9dC5uZXh0O3RyeXtvKCl9Y2F0Y2goaSl7dGhyb3cgdD9lKCk6bj12b2lkIDAsaX19bj12b2lkIDAsciYmci5lbnRlcigpfTtpZihmKWU9ZnVuY3Rpb24oKXt1Lm5leHRUaWNrKGEpfTtlbHNlIGlmKGkpe3ZhciBzPSEwLGw9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7bmV3IGkoYSkub2JzZXJ2ZShsLHtjaGFyYWN0ZXJEYXRhOiEwfSksZT1mdW5jdGlvbigpe2wuZGF0YT1zPSFzfX1lbHNlIGlmKGMmJmMucmVzb2x2ZSl7dmFyIHA9Yy5yZXNvbHZlKCk7ZT1mdW5jdGlvbigpe3AudGhlbihhKX19ZWxzZSBlPWZ1bmN0aW9uKCl7by5jYWxsKHIsYSl9O3JldHVybiBmdW5jdGlvbihyKXt2YXIgbz17Zm46cixuZXh0OnZvaWQgMH07biYmKG4ubmV4dD1vKSx0fHwodD1vLGUoKSksbj1vfX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDE1KSxvPWUoMjYpLGk9ZSgxOCksdT1lKDQ0KSxjPWUoMzYpLGY9T2JqZWN0LmFzc2lnbjt0LmV4cG9ydHM9IWZ8fGUoMTIpKGZ1bmN0aW9uKCl7dmFyIHQ9e30sbj17fSxlPVN5bWJvbCgpLHI9XCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiO3JldHVybiB0W2VdPTcsci5zcGxpdChcIlwiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09dH0pLDchPWYoe30sdClbZV18fE9iamVjdC5rZXlzKGYoe30sbikpLmpvaW4oXCJcIikhPXJ9KT9mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT11KHQpLGY9YXJndW1lbnRzLmxlbmd0aCxhPTEscz1vLmYsbD1pLmY7Zj5hOylmb3IodmFyIHAsaD1jKGFyZ3VtZW50c1thKytdKSx2PXM/cihoKS5jb25jYXQocyhoKSk6cihoKSx5PXYubGVuZ3RoLGQ9MDt5PmQ7KWwuY2FsbChoLHA9dltkKytdKSYmKGVbcF09aFtwXSk7cmV0dXJuIGV9OmZ9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDUpLG89ZSg2KSxpPWUoMTUpO3QuZXhwb3J0cz1lKDQpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsbil7byh0KTtmb3IodmFyIGUsdT1pKG4pLGM9dS5sZW5ndGgsZj0wO2M+Zjspci5mKHQsZT11W2YrK10sbltlXSk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxOCksbz1lKDE5KSxpPWUoOSksdT1lKDMwKSxjPWUoNyksZj1lKDM1KSxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7bi5mPWUoNCk/YTpmdW5jdGlvbih0LG4pe2lmKHQ9aSh0KSxuPXUobiwhMCksZil0cnl7cmV0dXJuIGEodCxuKX1jYXRjaChlKXt9aWYoYyh0LG4pKXJldHVybiBvKCFyLmYuY2FsbCh0LG4pLHRbbl0pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoOSksbz1lKDM5KS5mLGk9e30udG9TdHJpbmcsdT1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W10sYz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIG8odCl9Y2F0Y2gobil7cmV0dXJuIHUuc2xpY2UoKX19O3QuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiB1JiZcIltvYmplY3QgV2luZG93XVwiPT1pLmNhbGwodCk/Yyh0KTpvKHIodCkpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNyksbz1lKDQ0KSxpPWUoMjcpKFwiSUVfUFJPVE9cIiksdT1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHQpe3JldHVybiB0PW8odCkscih0LGkpP3RbaV06XCJmdW5jdGlvblwiPT10eXBlb2YgdC5jb25zdHJ1Y3RvciYmdCBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIE9iamVjdD91Om51bGx9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe2Zvcih2YXIgbyBpbiBuKWUmJnRbb10/dFtvXT1uW29dOnIodCxvLG5bb10pO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMiksbz1lKDMpLGk9ZSg1KSx1PWUoNCksYz1lKDEpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2Ygb1t0XT9vW3RdOnJbdF07dSYmbiYmIW5bY10mJmkuZihuLGMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDYpLG89ZSgyMiksaT1lKDEpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgZSx1PXIodCkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PXV8fHZvaWQgMD09KGU9cih1KVtpXSk/bjpvKGUpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjkpLG89ZSgyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciBpLHUsYz1TdHJpbmcobyhuKSksZj1yKGUpLGE9Yy5sZW5ndGg7cmV0dXJuIGY8MHx8Zj49YT90P1wiXCI6dm9pZCAwOihpPWMuY2hhckNvZGVBdChmKSxpPDU1Mjk2fHxpPjU2MzE5fHxmKzE9PT1hfHwodT1jLmNoYXJDb2RlQXQoZisxKSk8NTYzMjB8fHU+NTczNDM/dD9jLmNoYXJBdChmKTppOnQ/Yy5zbGljZShmLGYrMik6KGktNTUyOTY8PDEwKSsodS01NjMyMCkrNjU1MzYpfX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI5KSxvPU1hdGgubWF4LGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9cih0KSx0PDA/byh0K24sMCk6aSh0LG4pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzMpLG89ZSgxKShcIml0ZXJhdG9yXCIpLGk9ZSgxNCk7dC5leHBvcnRzPWUoMykuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24odCl7aWYodm9pZCAwIT10KXJldHVybiB0W29dfHx0W1wiQEBpdGVyYXRvclwiXXx8aVtyKHQpXX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDYzKSxvPWUoNzQpLGk9ZSgxNCksdT1lKDkpO3QuZXhwb3J0cz1lKDM3KShBcnJheSxcIkFycmF5XCIsZnVuY3Rpb24odCxuKXt0aGlzLl90PXUodCksdGhpcy5faT0wLHRoaXMuX2s9bn0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90LG49dGhpcy5fayxlPXRoaXMuX2krKztyZXR1cm4hdHx8ZT49dC5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLG8oMSkpOlwia2V5c1wiPT1uP28oMCxlKTpcInZhbHVlc1wiPT1uP28oMCx0W2VdKTpvKDAsW2UsdFtlXV0pfSxcInZhbHVlc1wiKSxpLkFyZ3VtZW50cz1pLkFycmF5LHIoXCJrZXlzXCIpLHIoXCJ2YWx1ZXNcIikscihcImVudHJpZXNcIil9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDExKTtyKHIuUytyLkYsXCJPYmplY3RcIix7YXNzaWduOmUoNzgpfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDExKTtyKHIuUytyLkYqIWUoNCksXCJPYmplY3RcIix7ZGVmaW5lUHJvcGVydHk6ZSg1KS5mfSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcixvLGksdT1lKDE3KSxjPWUoMiksZj1lKDE2KSxhPWUoMzMpLHM9ZSgxMSksbD1lKDEzKSxwPWUoMjIpLGg9ZSg2NCksdj1lKDY3KSx5PWUoODUpLGQ9ZSg0Mikuc2V0LGc9ZSg3NykoKSxtPVwiUHJvbWlzZVwiLHc9Yy5UeXBlRXJyb3IseD1jLnByb2Nlc3MsYj1jW21dLHg9Yy5wcm9jZXNzLF89XCJwcm9jZXNzXCI9PWEoeCksTz1mdW5jdGlvbigpe30saj0hIWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWIucmVzb2x2ZSgxKSxuPSh0LmNvbnN0cnVjdG9yPXt9KVtlKDEpKFwic3BlY2llc1wiKV09ZnVuY3Rpb24odCl7dChPLE8pfTtyZXR1cm4oX3x8XCJmdW5jdGlvblwiPT10eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50KSYmdC50aGVuKE8paW5zdGFuY2VvZiBufWNhdGNoKHIpe319KCksUz1mdW5jdGlvbih0LG4pe3JldHVybiB0PT09bnx8dD09PWImJm49PT1pfSxFPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiEoIWwodCl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mKG49dC50aGVuKSkmJm59LFQ9ZnVuY3Rpb24odCl7cmV0dXJuIFMoYix0KT9uZXcgUCh0KTpuZXcgbyh0KX0sUD1vPWZ1bmN0aW9uKHQpe3ZhciBuLGU7dGhpcy5wcm9taXNlPW5ldyB0KGZ1bmN0aW9uKHQscil7aWYodm9pZCAwIT09bnx8dm9pZCAwIT09ZSl0aHJvdyB3KFwiQmFkIFByb21pc2UgY29uc3RydWN0b3JcIik7bj10LGU9cn0pLHRoaXMucmVzb2x2ZT1wKG4pLHRoaXMucmVqZWN0PXAoZSl9LGs9ZnVuY3Rpb24odCl7dHJ5e3QoKX1jYXRjaChuKXtyZXR1cm57ZXJyb3I6bn19fSxMPWZ1bmN0aW9uKHQsbil7aWYoIXQuX24pe3QuX249ITA7dmFyIGU9dC5fYztnKGZ1bmN0aW9uKCl7Zm9yKHZhciByPXQuX3Ysbz0xPT10Ll9zLGk9MCx1PWZ1bmN0aW9uKG4pe3ZhciBlLGksdT1vP24ub2s6bi5mYWlsLGM9bi5yZXNvbHZlLGY9bi5yZWplY3QsYT1uLmRvbWFpbjt0cnl7dT8ob3x8KDI9PXQuX2gmJk4odCksdC5faD0xKSx1PT09ITA/ZT1yOihhJiZhLmVudGVyKCksZT11KHIpLGEmJmEuZXhpdCgpKSxlPT09bi5wcm9taXNlP2YodyhcIlByb21pc2UtY2hhaW4gY3ljbGVcIikpOihpPUUoZSkpP2kuY2FsbChlLGMsZik6YyhlKSk6ZihyKX1jYXRjaChzKXtmKHMpfX07ZS5sZW5ndGg+aTspdShlW2krK10pO3QuX2M9W10sdC5fbj0hMSxuJiYhdC5faCYmTSh0KX0pfX0sTT1mdW5jdGlvbih0KXtkLmNhbGwoYyxmdW5jdGlvbigpe3ZhciBuLGUscixvPXQuX3Y7aWYoRih0KSYmKG49ayhmdW5jdGlvbigpe18/eC5lbWl0KFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsbyx0KTooZT1jLm9udW5oYW5kbGVkcmVqZWN0aW9uKT9lKHtwcm9taXNlOnQscmVhc29uOm99KToocj1jLmNvbnNvbGUpJiZyLmVycm9yJiZyLmVycm9yKFwiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXCIsbyl9KSx0Ll9oPV98fEYodCk/MjoxKSx0Ll9hPXZvaWQgMCxuKXRocm93IG4uZXJyb3J9KX0sRj1mdW5jdGlvbih0KXtpZigxPT10Ll9oKXJldHVybiExO2Zvcih2YXIgbixlPXQuX2F8fHQuX2Mscj0wO2UubGVuZ3RoPnI7KWlmKG49ZVtyKytdLG4uZmFpbHx8IUYobi5wcm9taXNlKSlyZXR1cm4hMTtyZXR1cm4hMH0sTj1mdW5jdGlvbih0KXtkLmNhbGwoYyxmdW5jdGlvbigpe3ZhciBuO18/eC5lbWl0KFwicmVqZWN0aW9uSGFuZGxlZFwiLHQpOihuPWMub25yZWplY3Rpb25oYW5kbGVkKSYmbih7cHJvbWlzZTp0LHJlYXNvbjp0Ll92fSl9KX0sQT1mdW5jdGlvbih0KXt2YXIgbj10aGlzO24uX2R8fChuLl9kPSEwLG49bi5fd3x8bixuLl92PXQsbi5fcz0yLG4uX2F8fChuLl9hPW4uX2Muc2xpY2UoKSksTChuLCEwKSl9LFI9ZnVuY3Rpb24odCl7dmFyIG4sZT10aGlzO2lmKCFlLl9kKXtlLl9kPSEwLGU9ZS5fd3x8ZTt0cnl7aWYoZT09PXQpdGhyb3cgdyhcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpOyhuPUUodCkpP2coZnVuY3Rpb24oKXt2YXIgcj17X3c6ZSxfZDohMX07dHJ5e24uY2FsbCh0LGYoUixyLDEpLGYoQSxyLDEpKX1jYXRjaChvKXtBLmNhbGwocixvKX19KTooZS5fdj10LGUuX3M9MSxMKGUsITEpKX1jYXRjaChyKXtBLmNhbGwoe193OmUsX2Q6ITF9LHIpfX19O2p8fChiPWZ1bmN0aW9uKHQpe2godGhpcyxiLG0sXCJfaFwiKSxwKHQpLHIuY2FsbCh0aGlzKTt0cnl7dChmKFIsdGhpcywxKSxmKEEsdGhpcywxKSl9Y2F0Y2gobil7QS5jYWxsKHRoaXMsbil9fSxyPWZ1bmN0aW9uKHQpe3RoaXMuX2M9W10sdGhpcy5fYT12b2lkIDAsdGhpcy5fcz0wLHRoaXMuX2Q9ITEsdGhpcy5fdj12b2lkIDAsdGhpcy5faD0wLHRoaXMuX249ITF9LHIucHJvdG90eXBlPWUoODMpKGIucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uKHQsbil7dmFyIGU9VCh5KHRoaXMsYikpO3JldHVybiBlLm9rPVwiZnVuY3Rpb25cIiE9dHlwZW9mIHR8fHQsZS5mYWlsPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4sZS5kb21haW49Xz94LmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKGUpLHRoaXMuX2EmJnRoaXMuX2EucHVzaChlKSx0aGlzLl9zJiZMKHRoaXMsITEpLGUucHJvbWlzZX0sXCJjYXRjaFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pLFA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcjt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9ZihSLHQsMSksdGhpcy5yZWplY3Q9ZihBLHQsMSl9KSxzKHMuRytzLlcrcy5GKiFqLHtQcm9taXNlOmJ9KSxlKDIwKShiLG0pLGUoODQpKG0pLGk9ZSgzKVttXSxzKHMuUytzLkYqIWosbSx7cmVqZWN0OmZ1bmN0aW9uKHQpe3ZhciBuPVQodGhpcyksZT1uLnJlamVjdDtyZXR1cm4gZSh0KSxuLnByb21pc2V9fSkscyhzLlMrcy5GKih1fHwhaiksbSx7cmVzb2x2ZTpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgYiYmUyh0LmNvbnN0cnVjdG9yLHRoaXMpKXJldHVybiB0O3ZhciBuPVQodGhpcyksZT1uLnJlc29sdmU7cmV0dXJuIGUodCksbi5wcm9taXNlfX0pLHMocy5TK3MuRiohKGomJmUoNzMpKGZ1bmN0aW9uKHQpe2IuYWxsKHQpW1wiY2F0Y2hcIl0oTyl9KSksbSx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMsZT1UKG4pLHI9ZS5yZXNvbHZlLG89ZS5yZWplY3QsaT1rKGZ1bmN0aW9uKCl7dmFyIGU9W10saT0wLHU9MTt2KHQsITEsZnVuY3Rpb24odCl7dmFyIGM9aSsrLGY9ITE7ZS5wdXNoKHZvaWQgMCksdSsrLG4ucmVzb2x2ZSh0KS50aGVuKGZ1bmN0aW9uKHQpe2Z8fChmPSEwLGVbY109dCwtLXV8fHIoZSkpfSxvKX0pLC0tdXx8cihlKX0pO3JldHVybiBpJiZvKGkuZXJyb3IpLGUucHJvbWlzZX0scmFjZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLGU9VChuKSxyPWUucmVqZWN0LG89ayhmdW5jdGlvbigpe3YodCwhMSxmdW5jdGlvbih0KXtuLnJlc29sdmUodCkudGhlbihlLnJlc29sdmUscil9KX0pO3JldHVybiBvJiZyKG8uZXJyb3IpLGUucHJvbWlzZX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMiksbz1lKDcpLGk9ZSg0KSx1PWUoMTEpLGM9ZSg0MSksZj1lKDc2KS5LRVksYT1lKDEyKSxzPWUoMjgpLGw9ZSgyMCkscD1lKDIxKSxoPWUoMSksdj1lKDMyKSx5PWUoMzEpLGQ9ZSg3NSksZz1lKDY2KSxtPWUoNzApLHc9ZSg2KSx4PWUoOSksYj1lKDMwKSxfPWUoMTkpLE89ZSgzOCksaj1lKDgxKSxTPWUoODApLEU9ZSg1KSxUPWUoMTUpLFA9Uy5mLGs9RS5mLEw9ai5mLE09ci5TeW1ib2wsRj1yLkpTT04sTj1GJiZGLnN0cmluZ2lmeSxBPVwicHJvdG90eXBlXCIsUj1oKFwiX2hpZGRlblwiKSxJPWgoXCJ0b1ByaW1pdGl2ZVwiKSxDPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLEc9cyhcInN5bWJvbC1yZWdpc3RyeVwiKSxXPXMoXCJzeW1ib2xzXCIpLFU9cyhcIm9wLXN5bWJvbHNcIiksRD1PYmplY3RbQV0sSz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBNLEI9ci5RT2JqZWN0LEo9IUJ8fCFCW0FdfHwhQltBXS5maW5kQ2hpbGQsWT1pJiZhKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU8oayh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxcImFcIix7dmFsdWU6N30pLmF9fSkpLmF9KT9mdW5jdGlvbih0LG4sZSl7dmFyIHI9UChELG4pO3ImJmRlbGV0ZSBEW25dLGsodCxuLGUpLHImJnQhPT1EJiZrKEQsbixyKX06ayxxPWZ1bmN0aW9uKHQpe3ZhciBuPVdbdF09TyhNW0FdKTtyZXR1cm4gbi5faz10LG59LHo9SyYmXCJzeW1ib2xcIj09dHlwZW9mIE0uaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTX0sSD1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQ9PT1EJiZIKFUsbixlKSx3KHQpLG49YihuLCEwKSx3KGUpLG8oVyxuKT8oZS5lbnVtZXJhYmxlPyhvKHQsUikmJnRbUl1bbl0mJih0W1JdW25dPSExKSxlPU8oZSx7ZW51bWVyYWJsZTpfKDAsITEpfSkpOihvKHQsUil8fGsodCxSLF8oMSx7fSkpLHRbUl1bbl09ITApLFkodCxuLGUpKTprKHQsbixlKX0sVj1mdW5jdGlvbih0LG4pe3codCk7Zm9yKHZhciBlLHI9ZyhuPXgobikpLG89MCxpPXIubGVuZ3RoO2k+bzspSCh0LGU9cltvKytdLG5bZV0pO3JldHVybiB0fSxRPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHZvaWQgMD09PW4/Tyh0KTpWKE8odCksbil9LFg9ZnVuY3Rpb24odCl7dmFyIG49Qy5jYWxsKHRoaXMsdD1iKHQsITApKTtyZXR1cm4hKHRoaXM9PT1EJiZvKFcsdCkmJiFvKFUsdCkpJiYoIShufHwhbyh0aGlzLHQpfHwhbyhXLHQpfHxvKHRoaXMsUikmJnRoaXNbUl1bdF0pfHxuKX0sJD1mdW5jdGlvbih0LG4pe2lmKHQ9eCh0KSxuPWIobiwhMCksdCE9PUR8fCFvKFcsbil8fG8oVSxuKSl7dmFyIGU9UCh0LG4pO3JldHVybiFlfHwhbyhXLG4pfHxvKHQsUikmJnRbUl1bbl18fChlLmVudW1lcmFibGU9ITApLGV9fSxaPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPUwoeCh0KSkscj1bXSxpPTA7ZS5sZW5ndGg+aTspbyhXLG49ZVtpKytdKXx8bj09Unx8bj09Znx8ci5wdXNoKG4pO3JldHVybiByfSx0dD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZT10PT09RCxyPUwoZT9VOngodCkpLGk9W10sdT0wO3IubGVuZ3RoPnU7KSFvKFcsbj1yW3UrK10pfHxlJiYhbyhELG4pfHxpLnB1c2goV1tuXSk7cmV0dXJuIGl9O0t8fChNPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIE0pdGhyb3cgVHlwZUVycm9yKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIVwiKTt2YXIgdD1wKGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKSxuPWZ1bmN0aW9uKGUpe3RoaXM9PT1EJiZuLmNhbGwoVSxlKSxvKHRoaXMsUikmJm8odGhpc1tSXSx0KSYmKHRoaXNbUl1bdF09ITEpLFkodGhpcyx0LF8oMSxlKSl9O3JldHVybiBpJiZKJiZZKEQsdCx7Y29uZmlndXJhYmxlOiEwLHNldDpufSkscSh0KX0sYyhNW0FdLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSksUy5mPSQsRS5mPUgsZSgzOSkuZj1qLmY9WixlKDE4KS5mPVgsZSgyNikuZj10dCxpJiYhZSgxNykmJmMoRCxcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsWCwhMCksdi5mPWZ1bmN0aW9uKHQpe3JldHVybiBxKGgodCkpfSksdSh1LkcrdS5XK3UuRiohSyx7U3ltYm9sOk19KTtmb3IodmFyIG50PVwiaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXNcIi5zcGxpdChcIixcIiksZXQ9MDtudC5sZW5ndGg+ZXQ7KWgobnRbZXQrK10pO2Zvcih2YXIgbnQ9VChoLnN0b3JlKSxldD0wO250Lmxlbmd0aD5ldDspeShudFtldCsrXSk7dSh1LlMrdS5GKiFLLFwiU3ltYm9sXCIse1wiZm9yXCI6ZnVuY3Rpb24odCl7cmV0dXJuIG8oRyx0Kz1cIlwiKT9HW3RdOkdbdF09TSh0KX0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKHoodCkpcmV0dXJuIGQoRyx0KTt0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBzeW1ib2whXCIpfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtKPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtKPSExfX0pLHUodS5TK3UuRiohSyxcIk9iamVjdFwiLHtjcmVhdGU6USxkZWZpbmVQcm9wZXJ0eTpILGRlZmluZVByb3BlcnRpZXM6VixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6JCxnZXRPd25Qcm9wZXJ0eU5hbWVzOlosZ2V0T3duUHJvcGVydHlTeW1ib2xzOnR0fSksRiYmdSh1LlMrdS5GKighS3x8YShmdW5jdGlvbigpe3ZhciB0PU0oKTtyZXR1cm5cIltudWxsXVwiIT1OKFt0XSl8fFwie31cIiE9Tih7YTp0fSl8fFwie31cIiE9TihPYmplY3QodCkpfSkpLFwiSlNPTlwiLHtzdHJpbmdpZnk6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dCYmIXoodCkpe2Zvcih2YXIgbixlLHI9W3RdLG89MTthcmd1bWVudHMubGVuZ3RoPm87KXIucHVzaChhcmd1bWVudHNbbysrXSk7cmV0dXJuIG49clsxXSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYoZT1uKSwhZSYmbShuKXx8KG49ZnVuY3Rpb24odCxuKXtpZihlJiYobj1lLmNhbGwodGhpcyx0LG4pKSwheihuKSlyZXR1cm4gbn0pLHJbMV09bixOLmFwcGx5KEYscil9fX0pLE1bQV1bSV18fGUoOCkoTVtBXSxJLE1bQV0udmFsdWVPZiksbChNLFwiU3ltYm9sXCIpLGwoTWF0aCxcIk1hdGhcIiwhMCksbChyLkpTT04sXCJKU09OXCIsITApfSxmdW5jdGlvbih0LG4sZSl7ZSgzMSkoXCJhc3luY0l0ZXJhdG9yXCIpfSxmdW5jdGlvbih0LG4sZSl7ZSgzMSkoXCJvYnNlcnZhYmxlXCIpfSxmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIHIoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gbyh0KXtpZihzPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChzPT09ZXx8IXMpJiZzZXRUaW1lb3V0KXJldHVybiBzPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gcyh0LDApfWNhdGNoKG4pe3RyeXtyZXR1cm4gcy5jYWxsKG51bGwsdCwwKX1jYXRjaChuKXtyZXR1cm4gcy5jYWxsKHRoaXMsdCwwKX19fWZ1bmN0aW9uIGkodCl7aWYobD09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChsPT09cnx8IWwpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGw9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7cmV0dXJuIGwodCl9Y2F0Y2gobil7dHJ5e3JldHVybiBsLmNhbGwobnVsbCx0KX1jYXRjaChuKXtyZXR1cm4gbC5jYWxsKHRoaXMsdCl9fX1mdW5jdGlvbiB1KCl7eSYmaCYmKHk9ITEsaC5sZW5ndGg/dj1oLmNvbmNhdCh2KTpkPS0xLHYubGVuZ3RoJiZjKCkpfWZ1bmN0aW9uIGMoKXtpZigheSl7dmFyIHQ9byh1KTt5PSEwO2Zvcih2YXIgbj12Lmxlbmd0aDtuOyl7Zm9yKGg9dix2PVtdOysrZDxuOyloJiZoW2RdLnJ1bigpO2Q9LTEsbj12Lmxlbmd0aH1oPW51bGwseT0hMSxpKHQpfX1mdW5jdGlvbiBmKHQsbil7dGhpcy5mdW49dCx0aGlzLmFycmF5PW59ZnVuY3Rpb24gYSgpe312YXIgcyxsLHA9dC5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtzPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDplfWNhdGNoKHQpe3M9ZX10cnl7bD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnJ9Y2F0Y2godCl7bD1yfX0oKTt2YXIgaCx2PVtdLHk9ITEsZD0tMTtwLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKW5bZS0xXT1hcmd1bWVudHNbZV07di5wdXNoKG5ldyBmKHQsbikpLDEhPT12Lmxlbmd0aHx8eXx8byhjKX0sZi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0scC50aXRsZT1cImJyb3dzZXJcIixwLmJyb3dzZXI9ITAscC5lbnY9e30scC5hcmd2PVtdLHAudmVyc2lvbj1cIlwiLHAudmVyc2lvbnM9e30scC5vbj1hLHAuYWRkTGlzdGVuZXI9YSxwLm9uY2U9YSxwLm9mZj1hLHAucmVtb3ZlTGlzdGVuZXI9YSxwLnJlbW92ZUFsbExpc3RlbmVycz1hLHAuZW1pdD1hLHAuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0scC5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0scC5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LHAudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKHQsbixlKXsoZnVuY3Rpb24obil7dmFyIHI9XCJvYmplY3RcIj09dHlwZW9mIG4/bjpcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsbz1yLnJlZ2VuZXJhdG9yUnVudGltZSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocikuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKT49MCxpPW8mJnIucmVnZW5lcmF0b3JSdW50aW1lO2lmKHIucmVnZW5lcmF0b3JSdW50aW1lPXZvaWQgMCx0LmV4cG9ydHM9ZSg5OCksbylyLnJlZ2VuZXJhdG9yUnVudGltZT1pO2Vsc2UgdHJ5e2RlbGV0ZSByLnJlZ2VuZXJhdG9yUnVudGltZX1jYXRjaCh1KXtyLnJlZ2VuZXJhdG9yUnVudGltZT12b2lkIDB9fSkuY2FsbChuLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbih0LG4sZSl7KGZ1bmN0aW9uKG4sZSl7IWZ1bmN0aW9uKG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCxuLGUscil7dmFyIG89T2JqZWN0LmNyZWF0ZSgobnx8aSkucHJvdG90eXBlKSx1PW5ldyB2KHJ8fFtdKTtyZXR1cm4gby5faW52b2tlPWwodCxlLHUpLG99ZnVuY3Rpb24gbyh0LG4sZSl7dHJ5e3JldHVybnt0eXBlOlwibm9ybWFsXCIsYXJnOnQuY2FsbChuLGUpfX1jYXRjaChyKXtyZXR1cm57dHlwZTpcInRocm93XCIsYXJnOnJ9fX1mdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIHUoKXt9ZnVuY3Rpb24gYygpe31mdW5jdGlvbiBmKHQpe1tcIm5leHRcIixcInRocm93XCIsXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihuKXt0W25dPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2Uobix0KX19KX1mdW5jdGlvbiBhKHQpe3RoaXMuYXJnPXR9ZnVuY3Rpb24gcyh0KXtmdW5jdGlvbiBuKGUscixpLHUpe3ZhciBjPW8odFtlXSx0LHIpO2lmKFwidGhyb3dcIiE9PWMudHlwZSl7dmFyIGY9Yy5hcmcscz1mLnZhbHVlO3JldHVybiBzIGluc3RhbmNlb2YgYT9Qcm9taXNlLnJlc29sdmUocy5hcmcpLnRoZW4oZnVuY3Rpb24odCl7bihcIm5leHRcIix0LGksdSl9LGZ1bmN0aW9uKHQpe24oXCJ0aHJvd1wiLHQsaSx1KX0pOlByb21pc2UucmVzb2x2ZShzKS50aGVuKGZ1bmN0aW9uKHQpe2YudmFsdWU9dCxpKGYpfSx1KX11KGMuYXJnKX1mdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLG8pe24odCxlLHIsbyl9KX1yZXR1cm4gaT1pP2kudGhlbihyLHIpOnIoKX1cIm9iamVjdFwiPT10eXBlb2YgZSYmZS5kb21haW4mJihuPWUuZG9tYWluLmJpbmQobikpO3ZhciBpO3RoaXMuX2ludm9rZT1yfWZ1bmN0aW9uIGwodCxuLGUpe3ZhciByPWo7cmV0dXJuIGZ1bmN0aW9uKGksdSl7aWYocj09PUUpdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtpZihyPT09VCl7aWYoXCJ0aHJvd1wiPT09aSl0aHJvdyB1O3JldHVybiBkKCl9Zm9yKDs7KXt2YXIgYz1lLmRlbGVnYXRlO2lmKGMpe2lmKFwicmV0dXJuXCI9PT1pfHxcInRocm93XCI9PT1pJiZjLml0ZXJhdG9yW2ldPT09Zyl7ZS5kZWxlZ2F0ZT1udWxsO3ZhciBmPWMuaXRlcmF0b3JbXCJyZXR1cm5cIl07aWYoZil7dmFyIGE9byhmLGMuaXRlcmF0b3IsdSk7aWYoXCJ0aHJvd1wiPT09YS50eXBlKXtpPVwidGhyb3dcIix1PWEuYXJnO2NvbnRpbnVlfX1pZihcInJldHVyblwiPT09aSljb250aW51ZX12YXIgYT1vKGMuaXRlcmF0b3JbaV0sYy5pdGVyYXRvcix1KTtpZihcInRocm93XCI9PT1hLnR5cGUpe2UuZGVsZWdhdGU9bnVsbCxpPVwidGhyb3dcIix1PWEuYXJnO2NvbnRpbnVlfWk9XCJuZXh0XCIsdT1nO3ZhciBzPWEuYXJnO2lmKCFzLmRvbmUpcmV0dXJuIHI9UyxzO2VbYy5yZXN1bHROYW1lXT1zLnZhbHVlLGUubmV4dD1jLm5leHRMb2MsZS5kZWxlZ2F0ZT1udWxsfWlmKFwibmV4dFwiPT09aSllLnNlbnQ9ZS5fc2VudD11O2Vsc2UgaWYoXCJ0aHJvd1wiPT09aSl7aWYocj09PWopdGhyb3cgcj1ULHU7ZS5kaXNwYXRjaEV4Y2VwdGlvbih1KSYmKGk9XCJuZXh0XCIsdT1nKX1lbHNlXCJyZXR1cm5cIj09PWkmJmUuYWJydXB0KFwicmV0dXJuXCIsdSk7cj1FO3ZhciBhPW8odCxuLGUpO2lmKFwibm9ybWFsXCI9PT1hLnR5cGUpe3I9ZS5kb25lP1Q6Uzt2YXIgcz17dmFsdWU6YS5hcmcsZG9uZTplLmRvbmV9O2lmKGEuYXJnIT09UClyZXR1cm4gcztlLmRlbGVnYXRlJiZcIm5leHRcIj09PWkmJih1PWcpfWVsc2VcInRocm93XCI9PT1hLnR5cGUmJihyPVQsaT1cInRocm93XCIsdT1hLmFyZyl9fX1mdW5jdGlvbiBwKHQpe3ZhciBuPXt0cnlMb2M6dFswXX07MSBpbiB0JiYobi5jYXRjaExvYz10WzFdKSwyIGluIHQmJihuLmZpbmFsbHlMb2M9dFsyXSxuLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKG4pfWZ1bmN0aW9uIGgodCl7dmFyIG49dC5jb21wbGV0aW9ufHx7fTtuLnR5cGU9XCJub3JtYWxcIixkZWxldGUgbi5hcmcsdC5jb21wbGV0aW9uPW59ZnVuY3Rpb24gdih0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6XCJyb290XCJ9XSx0LmZvckVhY2gocCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiB5KHQpe2lmKHQpe3ZhciBuPXRbeF07aWYobilyZXR1cm4gbi5jYWxsKHQpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgZT0tMSxyPWZ1bmN0aW9uIG8oKXtmb3IoOysrZTx0Lmxlbmd0aDspaWYobS5jYWxsKHQsZSkpcmV0dXJuIG8udmFsdWU9dFtlXSxvLmRvbmU9ITEsbztyZXR1cm4gby52YWx1ZT1nLG8uZG9uZT0hMCxvfTtyZXR1cm4gci5uZXh0PXJ9fXJldHVybntuZXh0OmR9fWZ1bmN0aW9uIGQoKXtyZXR1cm57dmFsdWU6Zyxkb25lOiEwfX12YXIgZyxtPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LHg9dy5pdGVyYXRvcnx8XCJAQGl0ZXJhdG9yXCIsYj13LnRvU3RyaW5nVGFnfHxcIkBAdG9TdHJpbmdUYWdcIixfPVwib2JqZWN0XCI9PXR5cGVvZiB0LE89bi5yZWdlbmVyYXRvclJ1bnRpbWU7aWYoTylyZXR1cm4gdm9pZChfJiYodC5leHBvcnRzPU8pKTtPPW4ucmVnZW5lcmF0b3JSdW50aW1lPV8/dC5leHBvcnRzOnt9LE8ud3JhcD1yO3ZhciBqPVwic3VzcGVuZGVkU3RhcnRcIixTPVwic3VzcGVuZGVkWWllbGRcIixFPVwiZXhlY3V0aW5nXCIsVD1cImNvbXBsZXRlZFwiLFA9e30saz1jLnByb3RvdHlwZT1pLnByb3RvdHlwZTt1LnByb3RvdHlwZT1rLmNvbnN0cnVjdG9yPWMsYy5jb25zdHJ1Y3Rvcj11LGNbYl09dS5kaXNwbGF5TmFtZT1cIkdlbmVyYXRvckZ1bmN0aW9uXCIsTy5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFuJiYobj09PXV8fFwiR2VuZXJhdG9yRnVuY3Rpb25cIj09PShuLmRpc3BsYXlOYW1lfHxuLm5hbWUpKX0sTy5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsYyk6KHQuX19wcm90b19fPWMsYiBpbiB0fHwodFtiXT1cIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGspLHR9LE8uYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHQpfSxmKHMucHJvdG90eXBlKSxPLmFzeW5jPWZ1bmN0aW9uKHQsbixlLG8pe3ZhciBpPW5ldyBzKHIodCxuLGUsbykpO3JldHVybiBPLmlzR2VuZXJhdG9yRnVuY3Rpb24obik/aTppLm5leHQoKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTppLm5leHQoKX0pfSxmKGspLGtbeF09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sa1tiXT1cIkdlbmVyYXRvclwiLGsudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgR2VuZXJhdG9yXVwifSxPLmtleXM9ZnVuY3Rpb24odCl7dmFyIG49W107Zm9yKHZhciBlIGluIHQpbi5wdXNoKGUpO3JldHVybiBuLnJldmVyc2UoKSxmdW5jdGlvbiByKCl7Zm9yKDtuLmxlbmd0aDspe3ZhciBlPW4ucG9wKCk7aWYoZSBpbiB0KXJldHVybiByLnZhbHVlPWUsci5kb25lPSExLHJ9cmV0dXJuIHIuZG9uZT0hMCxcbnJ9fSxPLnZhbHVlcz15LHYucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2LHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PWcsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChoKSwhdClmb3IodmFyIG4gaW4gdGhpcylcInRcIj09PW4uY2hhckF0KDApJiZtLmNhbGwodGhpcyxuKSYmIWlzTmFOKCtuLnNsaWNlKDEpKSYmKHRoaXNbbl09Zyl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLG49dC5jb21wbGV0aW9uO2lmKFwidGhyb3dcIj09PW4udHlwZSl0aHJvdyBuLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4scil7cmV0dXJuIGkudHlwZT1cInRocm93XCIsaS5hcmc9dCxlLm5leHQ9biwhIXJ9aWYodGhpcy5kb25lKXRocm93IHQ7Zm9yKHZhciBlPXRoaXMscj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7cj49MDstLXIpe3ZhciBvPXRoaXMudHJ5RW50cmllc1tyXSxpPW8uY29tcGxldGlvbjtpZihcInJvb3RcIj09PW8udHJ5TG9jKXJldHVybiBuKFwiZW5kXCIpO2lmKG8udHJ5TG9jPD10aGlzLnByZXYpe3ZhciB1PW0uY2FsbChvLFwiY2F0Y2hMb2NcIiksYz1tLmNhbGwobyxcImZpbmFsbHlMb2NcIik7aWYodSYmYyl7aWYodGhpcy5wcmV2PG8uY2F0Y2hMb2MpcmV0dXJuIG4oby5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PG8uZmluYWxseUxvYylyZXR1cm4gbihvLmZpbmFsbHlMb2MpfWVsc2UgaWYodSl7aWYodGhpcy5wcmV2PG8uY2F0Y2hMb2MpcmV0dXJuIG4oby5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtpZih0aGlzLnByZXY8by5maW5hbGx5TG9jKXJldHVybiBuKG8uZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYzw9dGhpcy5wcmV2JiZtLmNhbGwocixcImZpbmFsbHlMb2NcIikmJnRoaXMucHJldjxyLmZpbmFsbHlMb2Mpe3ZhciBvPXI7YnJlYWt9fW8mJihcImJyZWFrXCI9PT10fHxcImNvbnRpbnVlXCI9PT10KSYmby50cnlMb2M8PW4mJm48PW8uZmluYWxseUxvYyYmKG89bnVsbCk7dmFyIGk9bz9vLmNvbXBsZXRpb246e307cmV0dXJuIGkudHlwZT10LGkuYXJnPW4sbz90aGlzLm5leHQ9by5maW5hbGx5TG9jOnRoaXMuY29tcGxldGUoaSksUH0sY29tcGxldGU6ZnVuY3Rpb24odCxuKXtpZihcInRocm93XCI9PT10LnR5cGUpdGhyb3cgdC5hcmc7XCJicmVha1wiPT09dC50eXBlfHxcImNvbnRpbnVlXCI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOlwicmV0dXJuXCI9PT10LnR5cGU/KHRoaXMucnZhbD10LmFyZyx0aGlzLm5leHQ9XCJlbmRcIik6XCJub3JtYWxcIj09PXQudHlwZSYmbiYmKHRoaXMubmV4dD1uKX0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBlPXRoaXMudHJ5RW50cmllc1tuXTtpZihlLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKGUuY29tcGxldGlvbixlLmFmdGVyTG9jKSxoKGUpLFB9fSxcImNhdGNoXCI6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGU9dGhpcy50cnlFbnRyaWVzW25dO2lmKGUudHJ5TG9jPT09dCl7dmFyIHI9ZS5jb21wbGV0aW9uO2lmKFwidGhyb3dcIj09PXIudHlwZSl7dmFyIG89ci5hcmc7aChlKX1yZXR1cm4gb319dGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6eSh0KSxyZXN1bHROYW1lOm4sbmV4dExvYzplfSxQfX19KFwib2JqZWN0XCI9PXR5cGVvZiBuP246XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJvYmplY3RcIj09dHlwZW9mIHNlbGY/c2VsZjp0aGlzKX0pLmNhbGwobixmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpLGUoOTYpKX1dKTsiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLy8gVGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IG5lZWRzIHRvIGJlXG4vLyBrZXB0IGlkZW50aWNhbCB0byB0aGUgd2F5IGl0IGlzIG9idGFpbmVkIGluIHJ1bnRpbWUuanNcbnZhciBnID1cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzO1xuXG4vLyBVc2UgYGdldE93blByb3BlcnR5TmFtZXNgIGJlY2F1c2Ugbm90IGFsbCBicm93c2VycyBzdXBwb3J0IGNhbGxpbmdcbi8vIGBoYXNPd25Qcm9wZXJ0eWAgb24gdGhlIGdsb2JhbCBgc2VsZmAgb2JqZWN0IGluIGEgd29ya2VyLiBTZWUgIzE4My5cbnZhciBoYWRSdW50aW1lID0gZy5yZWdlbmVyYXRvclJ1bnRpbWUgJiZcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZykuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKSA+PSAwO1xuXG4vLyBTYXZlIHRoZSBvbGQgcmVnZW5lcmF0b3JSdW50aW1lIGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuXG52YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cbi8vIEZvcmNlIHJlZXZhbHV0YXRpb24gb2YgcnVudGltZS5qcy5cbmcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3J1bnRpbWVcIik7XG5cbmlmIChoYWRSdW50aW1lKSB7XG4gIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJ1bnRpbWUuXG4gIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcbn0gZWxzZSB7XG4gIC8vIFJlbW92ZSB0aGUgZ2xvYmFsIHByb3BlcnR5IGFkZGVkIGJ5IHJ1bnRpbWUuanMuXG4gIHRyeSB7XG4gICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICB9IGNhdGNoKGUpIHtcbiAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBwcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIgfHxcbiAgICAgICAgICAgICAgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiICYmIGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZF0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIC8vIEEgcmV0dXJuIG9yIHRocm93ICh3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gdGhyb3dcbiAgICAgICAgICAgIC8vIG1ldGhvZCkgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICAgIHZhciByZXR1cm5NZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXTtcbiAgICAgICAgICAgIGlmIChyZXR1cm5NZXRob2QpIHtcbiAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKHJldHVybk1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGFyZyk7XG4gICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJldHVybiBtZXRob2QgdGhyZXcgYW4gZXhjZXB0aW9uLCBsZXQgdGhhdFxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBwcmV2YWlsIG92ZXIgdGhlIG9yaWdpbmFsIHJldHVybiBvciB0aHJvdy5cbiAgICAgICAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIG91dGVyIHJldHVybiwgbm93IHRoYXQgdGhlIGRlbGVnYXRlXG4gICAgICAgICAgICAgIC8vIGl0ZXJhdG9yIGhhcyBiZWVuIHRlcm1pbmF0ZWQuXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChcbiAgICAgICAgICAgIGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZF0sXG4gICAgICAgICAgICBkZWxlZ2F0ZS5pdGVyYXRvcixcbiAgICAgICAgICAgIGFyZ1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIExpa2UgcmV0dXJuaW5nIGdlbmVyYXRvci50aHJvdyh1bmNhdWdodCksIGJ1dCB3aXRob3V0IHRoZVxuICAgICAgICAgICAgLy8gb3ZlcmhlYWQgb2YgYW4gZXh0cmEgZnVuY3Rpb24gY2FsbC5cbiAgICAgICAgICAgIG1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZWxlZ2F0ZSBnZW5lcmF0b3IgcmFuIGFuZCBoYW5kbGVkIGl0cyBvd24gZXhjZXB0aW9ucyBzb1xuICAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgbWV0aG9kIHdhcywgd2UgY29udGludWUgYXMgaWYgaXQgaXNcbiAgICAgICAgICAvLyBcIm5leHRcIiB3aXRoIGFuIHVuZGVmaW5lZCBhcmcuXG4gICAgICAgICAgbWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuICAgICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuICAgICAgICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuICAgICAgICAgICAgcmV0dXJuIGluZm87XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGFyZykpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgICAgbWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICB2YXIgaW5mbyA9IHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBpZiAoY29udGV4dC5kZWxlZ2F0ZSAmJiBtZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgICAgICAgYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihhcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgbWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuICAgICAgICByZXR1cm4gISFjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsImV4cG9ydCBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgY29udHJvbFBvc2l0aW9uOiAncmlnaHQnLFxuICAgICAgYXBwZW5kOiBmYWxzZSxcbiAgICAgIGNvbnRyb2xPcmRlcjogW1xuICAgICAgICAnYXV0b2NvbXBsZXRlJyxcbiAgICAgICAgJ2J1dHRvbicsXG4gICAgICAgICdjaGVja2JveCcsXG4gICAgICAgICdjaGVja2JveC1ncm91cCcsXG4gICAgICAgICdkYXRlJyxcbiAgICAgICAgJ2ZpbGUnLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICdwYXJhZ3JhcGgnLFxuICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgJ3JhZGlvLWdyb3VwJyxcbiAgICAgICAgJ3NlbGVjdCcsXG4gICAgICAgICd0ZXh0JyxcbiAgICAgICAgJ3RleHRhcmVhJ1xuICAgICAgXSxcbiAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAvLyBBcnJheSBvZiBmaWVsZHMgdG8gZGlzYWJsZVxuICAgICAgZGlzYWJsZUZpZWxkczogW10sXG4gICAgICBkaXNhYmxlZEF0dHJzOiBbXSxcbiAgICAgIGRpc2FibGVkQWN0aW9uQnV0dG9uczogW10sXG4gICAgICBlZGl0T25BZGQ6IGZhbHNlLFxuICAgICAgLy8gVW5lZGl0YWJsZSBmaWVsZHMgb3Igb3RoZXIgY29udGVudCB5b3Ugd291bGQgbGlrZSB0byBhcHBlYXJcbiAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgcmVndWxhciBmaWVsZHM6XG4gICAgICAvLyBhcnJheSBvZiBvYmplY3RzIHdpdGggZmllbGRzIHZhbHVlc1xuICAgICAgLy8gZXg6XG4gICAgICAvLyBkZWZhdWx0RmllbGRzOiBbe1xuICAgICAgLy8gICBsYWJlbDogJ0ZpcnN0IE5hbWUnLFxuICAgICAgLy8gICBuYW1lOiAnZmlyc3QtbmFtZScsXG4gICAgICAvLyAgIHJlcXVpcmVkOiAndHJ1ZScsXG4gICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnWW91ciBmaXJzdCBuYW1lJyxcbiAgICAgIC8vICAgdHlwZTogJ3RleHQnXG4gICAgICAvLyB9LCB7XG4gICAgICAvLyAgIGxhYmVsOiAnUGhvbmUnLFxuICAgICAgLy8gICBuYW1lOiAncGhvbmUnLFxuICAgICAgLy8gICBkZXNjcmlwdGlvbjogJ0hvdyBjYW4gd2UgcmVhY2ggeW91PycsXG4gICAgICAvLyAgIHR5cGU6ICd0ZXh0J1xuICAgICAgLy8gfV0sXG4gICAgICBkZWZhdWx0RmllbGRzOiBbXSxcbiAgICAgIGZpZWxkczogW10sXG4gICAgICBmaWVsZFJlbW92ZVdhcm46IGZhbHNlLFxuICAgICAgaW5wdXRTZXRzOiBbXSxcbiAgICAgIHJvbGVzOiB7XG4gICAgICAgIDE6ICdBZG1pbmlzdHJhdG9yJ1xuICAgICAgfSxcbiAgICAgIG5vdGlmeToge1xuICAgICAgICBlcnJvcjogbWVzc2FnZSA9PiBjb25zb2xlLmVycm9yKG1lc3NhZ2UpLFxuICAgICAgICBzdWNjZXNzOiBtZXNzYWdlID0+IGNvbnNvbGUubG9nKG1lc3NhZ2UpLFxuICAgICAgICB3YXJuaW5nOiBtZXNzYWdlID0+IGNvbnNvbGUud2FybihtZXNzYWdlKVxuICAgICAgfSxcbiAgICAgIG9uU2F2ZTogKGV2dCwgZm9ybURhdGEpID0+IG51bGwsXG4gICAgICBvbkNsZWFyQWxsOiAoKSA9PiBudWxsLFxuICAgICAgcHJlcGVuZDogZmFsc2UsXG4gICAgICBzb3J0YWJsZUNvbnRyb2xzOiBmYWxzZSxcbiAgICAgIHN0aWNreUNvbnRyb2xzOiB7XG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcbiAgICAgICAgb2Zmc2V0OiB7XG4gICAgICAgICAgdG9wOiA1LFxuICAgICAgICAgIGJvdHRvbTogJ2F1dG8nLFxuICAgICAgICAgIHJpZ2h0OiAnYXV0bydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRlbXBsYXRlczoge30sXG4gICAgICBzaG93QWN0aW9uQnV0dG9uczogdHJ1ZSxcbiAgICAgIHR5cGVVc2VyRGlzYWJsZWRBdHRyczoge30sXG4gICAgICB0eXBlVXNlckF0dHJzOiB7fSxcbiAgICAgIHR5cGVVc2VyRXZlbnRzOiB7fSxcbiAgICAgIHByZWZpeDogJ2Zvcm0tYnVpbGRlci0nXG4gICAgfTtcblxuXG5leHBvcnQgY29uc3QgZGVmYXVsdEkxOG4gPSB7XG4gICAgICBsb2NhdGlvbjogJ2h0dHBzOi8vZm9ybWJ1aWxkZXIub25saW5lL2Fzc2V0cy9sYW5nLycsXG4gICAgICBsYW5nczogW1xuICAgICAgICAnZW4tVVMnXG4gICAgICBdLFxuICAgICAgcHJlbG9hZGVkOiB7XG4gICAgICAgICdlbi1VUyc6IHtcbiAgICAgICAgICBhZGRPcHRpb246ICdBZGQgT3B0aW9uICsnLFxuICAgICAgICAgIGFsbEZpZWxkc1JlbW92ZWQ6ICdBbGwgZmllbGRzIHdlcmUgcmVtb3ZlZC4nLFxuICAgICAgICAgIGFsbG93TXVsdGlwbGVGaWxlczogJ0FsbG93IHVzZXJzIHRvIHVwbG9hZCBtdWx0aXBsZSBmaWxlcycsXG4gICAgICAgICAgYXV0b2NvbXBsZXRlOiAnQXV0b2NvbXBsZXRlJyxcbiAgICAgICAgICBidXR0b246ICdCdXR0b24nLFxuICAgICAgICAgIGNhbm5vdEJlRW1wdHk6ICdUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgICAgY2hlY2tib3hHcm91cDogJ0NoZWNrYm94IEdyb3VwJyxcbiAgICAgICAgICBjaGVja2JveDogJ0NoZWNrYm94JyxcbiAgICAgICAgICBjaGVja2JveGVzOiAnQ2hlY2tib3hlcycsXG4gICAgICAgICAgY2xhc3NOYW1lOiAnQ2xhc3MnLFxuICAgICAgICAgIGNsZWFyQWxsTWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbGVhciBhbGwgZmllbGRzPycsXG4gICAgICAgICAgY2xlYXI6ICdDbGVhcicsXG4gICAgICAgICAgY2xvc2U6ICdDbG9zZScsXG4gICAgICAgICAgY29udGVudDogJ0NvbnRlbnQnLFxuICAgICAgICAgIGNvcHk6ICdDb3B5IFRvIENsaXBib2FyZCcsXG4gICAgICAgICAgY29weUJ1dHRvbjogJyYjNDM7JyxcbiAgICAgICAgICBjb3B5QnV0dG9uVG9vbHRpcDogJ0NvcHknLFxuICAgICAgICAgIGRhdGVGaWVsZDogJ0RhdGUgRmllbGQnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSGVscCBUZXh0JyxcbiAgICAgICAgICBkZXNjcmlwdGlvbkZpZWxkOiAnRGVzY3JpcHRpb24nLFxuICAgICAgICAgIGRldk1vZGU6ICdEZXZlbG9wZXIgTW9kZScsXG4gICAgICAgICAgZWRpdE5hbWVzOiAnRWRpdCBOYW1lcycsXG4gICAgICAgICAgZWRpdG9yVGl0bGU6ICdGb3JtIEVsZW1lbnRzJyxcbiAgICAgICAgICBlZGl0WE1MOiAnRWRpdCBYTUwnLFxuICAgICAgICAgIGVuYWJsZU90aGVyOiAnRW5hYmxlICZxdW90O090aGVyJnF1b3Q7JyxcbiAgICAgICAgICBlbmFibGVPdGhlck1zZzogJ0xldCB1c2VycyB0byBlbnRlciBhbiB1bmxpc3RlZCBvcHRpb24nLFxuICAgICAgICAgIGZpZWxkTm9uRWRpdGFibGU6ICdUaGlzIGZpZWxkIGNhbm5vdCBiZSBlZGl0ZWQuJyxcbiAgICAgICAgICBmaWVsZFJlbW92ZVdhcm5pbmc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZmllbGQ/JyxcbiAgICAgICAgICBmaWxlVXBsb2FkOiAnRmlsZSBVcGxvYWQnLFxuICAgICAgICAgIGZvcm1VcGRhdGVkOiAnRm9ybSBVcGRhdGVkJyxcbiAgICAgICAgICBnZXRTdGFydGVkOiAnRHJhZyBhIGZpZWxkIGZyb20gdGhlIHJpZ2h0IHRvIHRoaXMgYXJlYScsXG4gICAgICAgICAgaGVhZGVyOiAnSGVhZGVyJyxcbiAgICAgICAgICBoaWRlOiAnRWRpdCcsXG4gICAgICAgICAgaGlkZGVuOiAnSGlkZGVuIElucHV0JyxcbiAgICAgICAgICBpbmxpbmU6ICdJbmxpbmUnLFxuICAgICAgICAgIGlubGluZURlc2M6ICdEaXNwbGF5IHt0eXBlfSBpbmxpbmUnLFxuICAgICAgICAgIGxhYmVsOiAnTGFiZWwnLFxuICAgICAgICAgIGxhYmVsRW1wdHk6ICdGaWVsZCBMYWJlbCBjYW5ub3QgYmUgZW1wdHknLFxuICAgICAgICAgIGxpbWl0Um9sZTogJ0xpbWl0IGFjY2VzcyB0byBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHJvbGVzOicsXG4gICAgICAgICAgbWFuZGF0b3J5OiAnTWFuZGF0b3J5JyxcbiAgICAgICAgICBtYXhsZW5ndGg6ICdNYXggTGVuZ3RoJyxcbiAgICAgICAgICBtaW5PcHRpb25NZXNzYWdlOiAnVGhpcyBmaWVsZCByZXF1aXJlcyBhIG1pbmltdW0gb2YgMiBvcHRpb25zJyxcbiAgICAgICAgICBtdWx0aXBsZUZpbGVzOiAnTXVsdGlwbGUgRmlsZXMnLFxuICAgICAgICAgIG5hbWU6ICdOYW1lJyxcbiAgICAgICAgICBubzogJ05vJyxcbiAgICAgICAgICBub0ZpZWxkc1RvQ2xlYXI6ICdUaGVyZSBhcmUgbm8gZmllbGRzIHRvIGNsZWFyJyxcbiAgICAgICAgICBudW1iZXI6ICdOdW1iZXInLFxuICAgICAgICAgIG9mZjogJ09mZicsXG4gICAgICAgICAgb246ICdPbicsXG4gICAgICAgICAgb3B0aW9uOiAnT3B0aW9uJyxcbiAgICAgICAgICBvcHRpb25zOiAnT3B0aW9ucycsXG4gICAgICAgICAgb3B0aW9uYWw6ICdvcHRpb25hbCcsXG4gICAgICAgICAgb3B0aW9uTGFiZWxQbGFjZWhvbGRlcjogJ0xhYmVsJyxcbiAgICAgICAgICBvcHRpb25WYWx1ZVBsYWNlaG9sZGVyOiAnVmFsdWUnLFxuICAgICAgICAgIG9wdGlvbkVtcHR5OiAnT3B0aW9uIHZhbHVlIHJlcXVpcmVkJyxcbiAgICAgICAgICBvdGhlcjogJ090aGVyJyxcbiAgICAgICAgICBwYXJhZ3JhcGg6ICdQYXJhZ3JhcGgnLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnUGxhY2Vob2xkZXInLFxuICAgICAgICAgICdwbGFjZWhvbGRlci52YWx1ZSc6ICdWYWx1ZScsXG4gICAgICAgICAgJ3BsYWNlaG9sZGVyLmxhYmVsJzogJ0xhYmVsJyxcbiAgICAgICAgICAncGxhY2Vob2xkZXIudGV4dCc6ICcnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci50ZXh0YXJlYSc6ICcnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci5lbWFpbCc6ICdFbnRlciB5b3UgZW1haWwnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci5wbGFjZWhvbGRlcic6ICcnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci5jbGFzc05hbWUnOiAnc3BhY2Ugc2VwYXJhdGVkIGNsYXNzZXMnLFxuICAgICAgICAgICdwbGFjZWhvbGRlci5wYXNzd29yZCc6ICdFbnRlciB5b3VyIHBhc3N3b3JkJyxcbiAgICAgICAgICBwcmV2aWV3OiAnUHJldmlldycsXG4gICAgICAgICAgcmFkaW9Hcm91cDogJ1JhZGlvIEdyb3VwJyxcbiAgICAgICAgICByYWRpbzogJ1JhZGlvJyxcbiAgICAgICAgICByZW1vdmVNZXNzYWdlOiAnUmVtb3ZlIEVsZW1lbnQnLFxuICAgICAgICAgIHJlbW92ZU9wdGlvbjogJ1JlbW92ZSBPcHRpb24nLFxuICAgICAgICAgIHJlbW92ZTogJyYjMjE1OycsXG4gICAgICAgICAgcmVxdWlyZWQ6ICdSZXF1aXJlZCcsXG4gICAgICAgICAgcmljaFRleHQ6ICdSaWNoIFRleHQgRWRpdG9yJyxcbiAgICAgICAgICByb2xlczogJ0FjY2VzcycsXG4gICAgICAgICAgcm93czogJ1Jvd3MnLFxuICAgICAgICAgIHNhdmU6ICdTYXZlJyxcbiAgICAgICAgICBzZWxlY3RPcHRpb25zOiAnT3B0aW9ucycsXG4gICAgICAgICAgc2VsZWN0OiAnU2VsZWN0JyxcbiAgICAgICAgICBzZWxlY3RDb2xvcjogJ1NlbGVjdCBDb2xvcicsXG4gICAgICAgICAgc2VsZWN0aW9uc01lc3NhZ2U6ICdBbGxvdyBNdWx0aXBsZSBTZWxlY3Rpb25zJyxcbiAgICAgICAgICBzaXplOiAnU2l6ZScsXG4gICAgICAgICAgJ3NpemUueHMnOiAnRXh0cmEgU21hbGwnLFxuICAgICAgICAgICdzaXplLnNtJzogJ1NtYWxsJyxcbiAgICAgICAgICAnc2l6ZS5tJzogJ0RlZmF1bHQnLFxuICAgICAgICAgICdzaXplLmxnJzogJ0xhcmdlJyxcbiAgICAgICAgICBzdHlsZTogJ1N0eWxlJyxcbiAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgIGJ0bjoge1xuICAgICAgICAgICAgICAnZGVmYXVsdCc6ICdEZWZhdWx0JyxcbiAgICAgICAgICAgICAgZGFuZ2VyOiAnRGFuZ2VyJyxcbiAgICAgICAgICAgICAgaW5mbzogJ0luZm8nLFxuICAgICAgICAgICAgICBwcmltYXJ5OiAnUHJpbWFyeScsXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6ICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdWJ0eXBlOiAnVHlwZScsXG4gICAgICAgICAgdGV4dDogJ1RleHQgRmllbGQnLFxuICAgICAgICAgIHRleHRBcmVhOiAnVGV4dCBBcmVhJyxcbiAgICAgICAgICB0b2dnbGU6ICdUb2dnbGUnLFxuICAgICAgICAgIHdhcm5pbmc6ICdXYXJuaW5nIScsXG4gICAgICAgICAgdmFsdWU6ICdWYWx1ZScsXG4gICAgICAgICAgdmlld0pTT046ICd7ICB9JyxcbiAgICAgICAgICB2aWV3WE1MOiAnJmx0Oy8mZ3Q7JyxcbiAgICAgICAgICB5ZXM6ICdZZXMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgY29uZmlnID0ge307XG4iLCJleHBvcnQgY29uc3QgaW5zdGFuY2VEYXRhID0ge307XG5cbmV4cG9ydCBjbGFzcyBEYXRhIHtcbiAgY29uc3RydWN0b3IoZm9ybUlEKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICAgIHRoaXMuZm9ybUlEID0gZm9ybUlEO1xuICAgIHRoaXMubGF5b3V0ID0gJyc7XG4gICAgaW5zdGFuY2VEYXRhW2Zvcm1JRF0gPSB0aGlzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhdmFpbGFibGVmaWVsZHMgPSB7fTtcbiIsIlxuZXhwb3J0IGNvbnN0IGluc3RhbmNlRG9tID0ge307XG5leHBvcnQgY29uc3QgZGVmYXVsdFN1YnR5cGVzID0ge1xuICAgICAgdGV4dDogWyd0ZXh0JywgJ3Bhc3N3b3JkJywgJ2VtYWlsJywgJ2NvbG9yJywgJ3RlbCddLFxuICAgICAgaGVhZGVyOiBbJ2gxJywgJ2gyJywgJ2gzJ10sXG4gICAgICBidXR0b246IFsnYnV0dG9uJywgJ3N1Ym1pdCcsICdyZXNldCddLFxuICAgICAgcGFyYWdyYXBoOiBbJ3AnLCAnYWRkcmVzcycsICdibG9ja3F1b3RlJywgJ2NhbnZhcycsICdvdXRwdXQnXSxcbiAgICAgIHRleHRhcmVhOiBbJ3RleHRhcmVhJywgJ3F1aWxsJ11cbiAgICB9O1xuXG5cbmV4cG9ydCBjb25zdCBlbXB0eSA9IGVsZW1lbnQgPT4ge1xuICB3aGlsZSAoZWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmZpcnN0Q2hpbGQpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlciA9IChlbGVtcywgdGVybSwgc2hvdyA9IHRydWUpID0+IHtcbiAgbGV0IGZpbHRlcmVkRWxlbXMgPSBbXTtcbiAgbGV0IHRvZ2dsZSA9IFsnbm9uZScsICdibG9jayddO1xuXG4gIGlmIChzaG93KSB7XG4gICAgdG9nZ2xlID0gdG9nZ2xlLnJldmVyc2UoKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBlbGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxldCB0eHQgPSBlbGVtc1tpXS50ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eHQuaW5kZXhPZih0ZXJtLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgZWxlbXNbaV0uc3R5bGUuZGlzcGxheSA9IHRvZ2dsZVswXTtcbiAgICAgIGZpbHRlcmVkRWxlbXMucHVzaChlbGVtc1tpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSB0b2dnbGVbMV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRWxlbXM7XG59O1xuXG5leHBvcnQgY29uc3Qgb3B0aW9uRmllbGRzID0gW1xuICAgICAgJ3NlbGVjdCcsXG4gICAgICAnY2hlY2tib3gtZ3JvdXAnLFxuICAgICAgJ2NoZWNrYm94JyxcbiAgICAgICdyYWRpby1ncm91cCcsXG4gICAgICAnYXV0b2NvbXBsZXRlJ1xuICAgIF07XG5cbmV4cG9ydCBjb25zdCBvcHRpb25GaWVsZHNSZWdFeCA9IG5ldyBSZWdFeHAoYCgke29wdGlvbkZpZWxkcy5qb2luKCd8Jyl9KWApO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tIHtcbiAgY29uc3RydWN0b3IoZm9ybUlEKSB7XG4gICAgdGhpcy5vcHRpb25GaWVsZHMgPSBvcHRpb25GaWVsZHM7XG4gICAgdGhpcy5vcHRpb25GaWVsZHNSZWdFeCA9IG9wdGlvbkZpZWxkc1JlZ0V4O1xuXG4gICAgdGhpcy5zdWJ0eXBlcyA9IGRlZmF1bHRTdWJ0eXBlcztcblxuICAgIC8qKlxuICAgICAqIFV0aWwgdG8gcmVtb3ZlIGNvbnRlbnRzIG9mIERPTSBPYmplY3RcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IGVsZW1lbnQgd2l0aCBpdHMgY2hpbGRyZW4gcmVtb3ZlZFxuICAgICAqL1xuICAgIHRoaXMuZW1wdHkgPSBlbXB0eTtcblxuICAgIC8qKlxuICAgICAqIEhpZGUgb3Igc2hvdyBhbiBBcnJheSBvciBIVE1MQ29sbGVjdGlvbiBvZiBlbGVtZW50c1xuICAgICAqIEBwYXJhbSAge0FycmF5fSAgIGVsZW1zXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSAgdGVybSAgbWF0Y2ggdGV4dENvbnRlbnQgdG8gdGhpcyB0ZXJtXG4gICAgICogQHBhcmFtICB7Qm9vbGVhbn0gc2hvdyAgb3IgaGlkZSBlbGVtZW50c1xuICAgICAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIGZpbHRlcmVkIGVsZW1lbnRzXG4gICAgICovXG4gICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XG5cbiAgICBpbnN0YW5jZURvbVtmb3JtSURdID0gdGhpcztcbiAgICByZXR1cm4gaW5zdGFuY2VEb21bZm9ybUlEXTtcbiAgfVxufVxuIiwiLyoqXG4gKiBGb3JtIEJ1aWxkZXIgZXZlbnRzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHZhcmlvdXMgZXZlbnRzIHRvIGJlIHRyaWdnZXJcbiAqL1xuLy8gZnVuY3Rpb24gZmJFdmVudHMoKXtcbiAgY29uc3QgZXZlbnRzID0ge307XG5cbiAgZXZlbnRzLmxvYWRlZCA9IG5ldyBFdmVudCgnbG9hZGVkJyk7XG4gIGV2ZW50cy52aWV3RGF0YSA9IG5ldyBFdmVudCgndmlld0RhdGEnKTtcbiAgZXZlbnRzLnVzZXJEZWNsaW5lZCA9IG5ldyBFdmVudCgndXNlckRlY2xpbmVkJyk7XG4gIGV2ZW50cy5tb2RhbENsb3NlZCA9IG5ldyBFdmVudCgnbW9kYWxDbG9zZWQnKTtcbiAgZXZlbnRzLm1vZGFsT3BlbmVkID0gbmV3IEV2ZW50KCdtb2RhbE9wZW5lZCcpO1xuICBldmVudHMuZm9ybVNhdmVkID0gbmV3IEV2ZW50KCdmb3JtU2F2ZWQnKTtcbiAgZXZlbnRzLmZpZWxkQWRkZWQgPSBuZXcgRXZlbnQoJ2ZpZWxkQWRkZWQnKTtcbiAgZXZlbnRzLmZpZWxkUmVtb3ZlZCA9IG5ldyBFdmVudCgnZmllbGRSZW1vdmVkJyk7XG4gIGV2ZW50cy5maWVsZFJlbmRlcmVkID0gbmV3IEV2ZW50KCdmaWVsZFJlbmRlcmVkJyk7XG5cbi8vICAgcmV0dXJuIGV2ZW50cztcbi8vIH1cblxuZXhwb3J0IGRlZmF1bHQgZXZlbnRzO1xuIiwiaW1wb3J0IERvbSBmcm9tICcuL2RvbSc7XG5pbXBvcnQge1xuICBEYXRhLFxuICBhdmFpbGFibGVmaWVsZHMgYXMgYUZpZWxkc1xufSBmcm9tICcuL2RhdGEnO1xuaW1wb3J0IG1pMThuIGZyb20gJ21pMThuJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBldmVudHMgZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IEhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7ZGVmYXVsdE9wdGlvbnMsIGRlZmF1bHRJMThuLCBjb25maWd9IGZyb20gJy4vY29uZmlnJztcblxucmVxdWlyZSgnLi9wb2x5ZmlsbHMuanMnKS5kZWZhdWx0O1xuXG5sZXQgaW5zdGFuY2VUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbmNvbnN0IEZvcm1CdWlsZGVyID0gZnVuY3Rpb24ob3B0cywgZWxlbWVudCkge1xuICBjb25zdCBmb3JtQnVpbGRlciA9IHRoaXM7XG4gIGNvbnN0IGkxOG4gPSBtaTE4bi5jdXJyZW50O1xuICBjb25zdCBmb3JtSUQgPSAnZnJtYi0nICsgaW5zdGFuY2VUaW1lKys7XG4gIGNvbnN0IGRhdGEgPSBuZXcgRGF0YShmb3JtSUQpO1xuICBjb25zdCBkID0gbmV3IERvbShmb3JtSUQpO1xuICBjb25zdCBoZWxwZXJzID0gbmV3IEhlbHBlcnMoZm9ybUlEKTtcbiAgY29uc3QgbSA9IHV0aWxzLm1hcmt1cDtcblxuICBjb25zdCBvcmlnaW5hbE9wdHMgPSBvcHRzO1xuXG4gIG9wdHMgPSBoZWxwZXJzLnByb2Nlc3NPcHRpb25zKG9wdHMpO1xuXG4gIGNvbnN0IHN1YnR5cGVzID0gY29uZmlnLnN1YnR5cGVzID0gaGVscGVycy5wcm9jZXNzU3VidHlwZXMob3B0cy5zdWJ0eXBlcyk7XG4gIGhlbHBlcnMuZWRpdG9yVUkoZm9ybUlEKTtcblxuICBsZXQgJHN0YWdlID0gJChkLnN0YWdlKTtcblxuICBkYXRhLmxheW91dCA9IGhlbHBlcnMuZWRpdG9yTGF5b3V0KG9wdHMuY29udHJvbFBvc2l0aW9uKTtcbiAgZGF0YS5mb3JtSUQgPSBmb3JtSUQ7XG4gIGRhdGEubGFzdElEID0gYCR7ZGF0YS5mb3JtSUR9LWZsZC0xYDtcblxuICBsZXQgZnJtYkZpZWxkcyA9IGhlbHBlcnMub3JkZXJGaWVsZHMob3B0cy5maWVsZHMpO1xuXG4gIGlmIChvcHRzLmRpc2FibGVGaWVsZHMpIHtcbiAgICAvLyByZW1vdmUgZGlzYWJsZWRGaWVsZHNcbiAgICBmcm1iRmllbGRzID0gZnJtYkZpZWxkcy5maWx0ZXIoZnVuY3Rpb24oZmllbGQpIHtcbiAgICAgIHJldHVybiAhdXRpbHMuaW5BcnJheShmaWVsZC5hdHRycy50eXBlLCBvcHRzLmRpc2FibGVGaWVsZHMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9wdHMuc29ydGFibGVDb250cm9scykge1xuICAgIGQuY29udHJvbHMuY2xhc3NMaXN0LmFkZCgnc29ydC1lbmFibGVkJyk7XG4gIH1cblxuICBsZXQgJGNiVUwgPSAkKGQuY29udHJvbHMpO1xuXG4gIC8vIExvb3AgdGhyb3VnaCBmbXJiRmllbGRzXG4gIHV0aWxzLmZvckVhY2goZnJtYkZpZWxkcywgKGkpID0+IHtcbiAgICBsZXQge2F0dHJzLCBpY29uLCAuLi5maWVsZH0gPSBmcm1iRmllbGRzW2ldO1xuICAgIGxldCBjb250cm9sTGFiZWwgPSBmaWVsZC5sYWJlbDtcbiAgICBsZXQgaWNvbkNsYXNzTmFtZSA9ICFpY29uID8gYGljb24tJHthdHRycy5uYW1lIHx8IGF0dHJzLnR5cGV9YCA6ICcnO1xuICAgIGlmIChpY29uKSB7XG4gICAgICBjb250cm9sTGFiZWwgPSBgPHNwYW4gY2xhc3M9XCJjb250cm9sLWljb25cIj4ke2ljb259PC9zcGFuPiR7ZmllbGQubGFiZWx9YDtcbiAgICB9XG4gICAgbGV0IG5ld0ZpZWxkQ29udHJvbCA9IG0oJ2xpJyxcbiAgICAgIG0oJ3NwYW4nLCBjb250cm9sTGFiZWwpLFxuICAgICAge2NsYXNzTmFtZTogYCR7aWNvbkNsYXNzTmFtZX0gaW5wdXQtY29udHJvbCBpbnB1dC1jb250cm9sLSR7aX1gfVxuICAgICk7XG5cbiAgICBhRmllbGRzW2F0dHJzLnR5cGVdID0gZnJtYkZpZWxkc1tpXTtcbiAgICBuZXdGaWVsZENvbnRyb2wuZGF0YXNldC50eXBlID0gYXR0cnMudHlwZTtcbiAgICBkLmNvbnRyb2xzLmFwcGVuZENoaWxkKG5ld0ZpZWxkQ29udHJvbCk7XG4gIH0pO1xuXG4gIGlmIChvcHRzLmlucHV0U2V0cy5sZW5ndGgpIHtcbiAgICAkKCc8bGkvPicsIHsnY2xhc3MnOiAnZmItc2VwYXJhdG9yJ30pLmh0bWwoJzxocj4nKS5hcHBlbmRUbygkY2JVTCk7XG4gICAgb3B0cy5pbnB1dFNldHMuZm9yRWFjaCgoc2V0LCBpKSA9PiB7XG4gICAgICBzZXQubmFtZSA9IHNldC5uYW1lIHx8IHV0aWxzLm1ha2VDbGFzc05hbWUoc2V0LmxhYmVsKTtcbiAgICAgIGxldCBpbnB1dFNldCA9IG0oJ2xpJywgc2V0LmxhYmVsLCB7XG4gICAgICAgIGNsYXNzTmFtZTogYGlucHV0LXNldC1jb250cm9sIGlucHV0LXNldC0ke2l9YCxcbiAgICAgICAgdHlwZTogc2V0Lm5hbWVcbiAgICAgIH0pO1xuICAgICAgJChpbnB1dFNldCkuYXBwZW5kVG8oJGNiVUwpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU29ydGFibGUgZmllbGRzXG4gICRzdGFnZS5zb3J0YWJsZSh7XG4gICAgY3Vyc29yOiAnbW92ZScsXG4gICAgb3BhY2l0eTogMC45LFxuICAgIHJldmVydDogMTUwLFxuICAgIGJlZm9yZVN0b3A6IChldnQsIHVpKSA9PiBoZWxwZXJzLmJlZm9yZVN0b3AuY2FsbChoZWxwZXJzLCBldnQsIHVpKSxcbiAgICBzdGFydDogKGV2dCwgdWkpID0+IGhlbHBlcnMuc3RhcnRNb3ZpbmcuY2FsbChoZWxwZXJzLCBldnQsIHVpKSxcbiAgICBzdG9wOiAoZXZ0LCB1aSkgPT4gaGVscGVycy5zdG9wTW92aW5nLmNhbGwoaGVscGVycywgZXZ0LCB1aSksXG4gICAgY2FuY2VsOiAnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIC5kaXNhYmxlZC1maWVsZCwgLmZvcm0tZWxlbWVudHMsIC5idG4sIGJ1dHRvbicsXG4gICAgcGxhY2Vob2xkZXI6ICdmcm1iLXBsYWNlaG9sZGVyJyxcbiAgfSk7XG5cbiAgLy8gQ29udHJvbEJveCB3aXRoIGRpZmZlcmVudCBmaWVsZHNcbiAgJGNiVUwuc29ydGFibGUoe1xuICAgIGhlbHBlcjogJ2Nsb25lJyxcbiAgICBvcGFjaXR5OiAwLjksXG4gICAgY29ubmVjdFdpdGg6ICRzdGFnZSxcbiAgICBjYW5jZWw6ICcuZmItc2VwYXJhdG9yJyxcbiAgICBjdXJzb3I6ICdtb3ZlJyxcbiAgICBzY3JvbGw6IGZhbHNlLFxuICAgIHBsYWNlaG9sZGVyOiAndWktc3RhdGUtaGlnaGxpZ2h0JyxcbiAgICBzdGFydDogKGV2dCwgdWkpID0+IGhlbHBlcnMuc3RhcnRNb3ZpbmcuY2FsbChoZWxwZXJzLCBldnQsIHVpKSxcbiAgICBzdG9wOiAoZXZ0LCB1aSkgPT4gaGVscGVycy5zdG9wTW92aW5nLmNhbGwoaGVscGVycywgZXZ0LCB1aSksXG4gICAgcmV2ZXJ0OiAxNTAsXG4gICAgYmVmb3JlU3RvcDogKGV2dCwgdWkpID0+IGhlbHBlcnMuYmVmb3JlU3RvcC5jYWxsKGhlbHBlcnMsIGV2dCwgdWkpLFxuICAgIGRpc3RhbmNlOiAzLFxuICAgIHVwZGF0ZTogZnVuY3Rpb24oZXZlbnQsIHVpKSB7XG4gICAgICBpZiAoaGVscGVycy5kb0NhbmNlbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh1aS5pdGVtLnBhcmVudCgpWzBdID09PSBkLnN0YWdlKSB7XG4gICAgICAgIGhlbHBlcnMuZG9DYW5jZWwgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzQ29udHJvbCh1aS5pdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlbHBlcnMuc2V0RmllbGRPcmRlcigkY2JVTCk7XG4gICAgICAgIGhlbHBlcnMuZG9DYW5jZWwgPSAhb3B0cy5zb3J0YWJsZUNvbnRyb2xzO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgbGV0IHByb2Nlc3NDb250cm9sID0gY29udHJvbCA9PiB7XG4gICAgaWYgKGNvbnRyb2xbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKCdpbnB1dC1zZXQtY29udHJvbCcpKSB7XG4gICAgICBsZXQgaW5wdXRTZXRzID0gW107XG4gICAgICBsZXQgaW5wdXRTZXQgPSBvcHRzLmlucHV0U2V0cy5maWx0ZXIoc2V0ID0+XG4gICAgICAgIHNldC5uYW1lID09PSBjb250cm9sWzBdLnR5cGUpWzBdO1xuICAgICAgaWYgKGlucHV0U2V0LnNob3dIZWFkZXIpIHtcbiAgICAgICAgbGV0IGhlYWRlciA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdoZWFkZXInLFxuICAgICAgICAgICAgc3VidHlwZTogJ2gyJyxcbiAgICAgICAgICAgIGlkOiBpbnB1dFNldC5uYW1lLFxuICAgICAgICAgICAgbGFiZWw6IGlucHV0U2V0LmxhYmVsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpbnB1dFNldHMucHVzaChoZWFkZXIpO1xuICAgICAgfVxuICAgICAgaW5wdXRTZXRzLnB1c2goLi4uaW5wdXRTZXQuZmllbGRzKTtcbiAgICAgIGlucHV0U2V0cy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgcHJlcEZpZWxkVmFycyhmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGlmIChoZWxwZXJzLnN0b3BJbmRleCB8fCBoZWxwZXJzLnN0b3BJbmRleCA9PT0gMCkge1xuICAgICAgICAgIGhlbHBlcnMuc3RvcEluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVwRmllbGRWYXJzKGNvbnRyb2wsIHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBkLmVkaXRvcldyYXAgPSBtKCdkaXYnLCBudWxsLCB7XG4gICAgaWQ6IGAke2RhdGEuZm9ybUlEfS1mb3JtLXdyYXBgLFxuICAgIGNsYXNzTmFtZTogJ2Zvcm0td3JhcCBmb3JtLWJ1aWxkZXInICsgdXRpbHMubW9iaWxlQ2xhc3MoKVxuICB9KTtcblxuICBsZXQgJGVkaXRvcldyYXAgPSAkKGQuZWRpdG9yV3JhcCk7XG5cbiAgbGV0IGNiV3JhcCA9IG0oJ2RpdicsIGQuY29udHJvbHMsIHtcbiAgICBpZDogYCR7ZGF0YS5mb3JtSUR9LWNiLXdyYXBgLFxuICAgIGNsYXNzTmFtZTogJ2NiLXdyYXAgJyArIGRhdGEubGF5b3V0LmNvbnRyb2xzXG4gIH0pO1xuXG4gIGlmIChvcHRzLnNob3dBY3Rpb25CdXR0b25zKSB7XG4gICAgY29uc3QgYnV0dG9ucyA9IG9wdHMuYWN0aW9uQnV0dG9ucy5tYXAoYnRuRGF0YSA9PiB7XG4gICAgICBpZiAoYnRuRGF0YS5pZCAmJiBvcHRzLmRpc2FibGVkQWN0aW9uQnV0dG9ucy5pbmRleE9mKGJ0bkRhdGEuaWQpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gaGVscGVycy5wcm9jZXNzQWN0aW9uQnV0dG9ucyhidG5EYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBmb3JtQWN0aW9ucyA9IGQuZm9ybUFjdGlvbnMgPSBtKCdkaXYnLCBidXR0b25zLCB7XG4gICAgICBjbGFzc05hbWU6ICdmb3JtLWFjdGlvbnMgYnRuLWdyb3VwJ1xuICAgIH0pO1xuXG4gICAgY2JXcmFwLmFwcGVuZENoaWxkKGZvcm1BY3Rpb25zKTtcbiAgfVxuXG4gIGxldCBzdGFnZVdyYXAgPSBtKCdkaXYnLCBbZC5zdGFnZSwgY2JXcmFwXSwge1xuICAgIGlkOiBgJHtkYXRhLmZvcm1JRH0tc3RhZ2Utd3JhcGAsXG4gICAgY2xhc3NOYW1lOiAnc3RhZ2Utd3JhcCAnICsgZGF0YS5sYXlvdXQuc3RhZ2VcbiAgfSk7XG5cbiAgJGVkaXRvcldyYXAuYXBwZW5kKHN0YWdlV3JhcCwgY2JXcmFwKTtcblxuICBpZiAoZWxlbWVudC50eXBlICE9PSAndGV4dGFyZWEnKSB7XG4gICAgJChlbGVtZW50KS5hcHBlbmQoJGVkaXRvcldyYXApO1xuICB9IGVsc2Uge1xuICAgICQoZWxlbWVudCkucmVwbGFjZVdpdGgoJGVkaXRvcldyYXApO1xuICB9XG5cbiAgbGV0IHNhdmVBbmRVcGRhdGUgPSB1dGlscy5kZWJvdW5jZShldnQgPT4ge1xuICAgIGlmIChldnQpIHtcbiAgICAgIGlmIChldnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldnQudGFyZ2V0Lm5hbWUgPT09ICdjbGFzc05hbWUnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0ICRmaWVsZCA9ICQoZXZ0LnRhcmdldCkuY2xvc2VzdCgnLmZvcm0tZmllbGQnKTtcbiAgICAgIGhlbHBlcnMudXBkYXRlUHJldmlldygkZmllbGQpO1xuICAgICAgaGVscGVycy5zYXZlLmNhbGwoaGVscGVycyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBTYXZlIGZpZWxkIG9uIGNoYW5nZVxuICAkc3RhZ2Uub24oJ2NoYW5nZSBibHVyIGtleXVwJywgJy5mb3JtLWVsZW1lbnRzIGlucHV0LCAuZm9ybS1lbGVtZW50cyBzZWxlY3QsIC5mb3JtLWVsZW1lbnRzIHRleHRhcmVhJywgc2F2ZUFuZFVwZGF0ZSk7XG5cbiAgJCgnbGknLCBkLmNvbnRyb2xzKS5jbGljayhldnQgPT4ge1xuICAgIGxldCAkY29udHJvbCA9ICQoZXZ0LnRhcmdldCkuY2xvc2VzdCgnbGknKTtcbiAgICBoZWxwZXJzLnN0b3BJbmRleCA9IHVuZGVmaW5lZDtcbiAgICBwcm9jZXNzQ29udHJvbCgkY29udHJvbCk7XG4gICAgaGVscGVycy5zYXZlLmNhbGwoaGVscGVycyk7XG4gIH0pO1xuXG4gIC8vIEFkZCBhcHBlbmQgYW5kIHByZXBlbmQgb3B0aW9ucyBpZiBuZWNlc3NhcnlcbiAgbGV0IG5vbkVkaXRhYmxlRmllbGRzID0gKCkgPT4ge1xuICAgIGxldCBjYW5jZWxBcnJheSA9IFtdO1xuICAgIGNvbnN0IGRpc2FibGVkRmllbGQgPSB0eXBlID0+XG4gICAgdXRpbHMubWFya3VwKCdsaScsIG9wdHNbdHlwZV0sIHtcbiAgICAgIGNsYXNzTmFtZTogYGRpc2FibGVkLWZpZWxkIGZvcm0tJHt0eXBlfWBcbiAgICB9KTtcblxuICAgIGlmIChvcHRzLnByZXBlbmQgJiYgISQoJy5kaXNhYmxlZC1maWVsZC5mb3JtLXByZXBlbmQnLCBkLnN0YWdlKS5sZW5ndGgpIHtcbiAgICAgIGNhbmNlbEFycmF5LnB1c2godHJ1ZSk7XG4gICAgICAkc3RhZ2UucHJlcGVuZChkaXNhYmxlZEZpZWxkKCdwcmVwZW5kJykpO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmFwcGVuZCAmJiAhJCgnLmRpc2FibGVkLWZpZWxkLmZvcm0tLmFwcGVuZCcsIGQuc3RhZ2UpLmxlbmd0aCkge1xuICAgICAgY2FuY2VsQXJyYXkucHVzaCh0cnVlKTtcbiAgICAgICRzdGFnZS5hcHBlbmQoZGlzYWJsZWRGaWVsZCgnYXBwZW5kJykpO1xuICAgIH1cblxuICAgIGhlbHBlcnMuZGlzYWJsZWRUVChkLnN0YWdlKTtcbiAgICByZXR1cm4gY2FuY2VsQXJyYXkuc29tZShlbGVtID0+IGVsZW0gPT09IHRydWUpO1xuICB9O1xuXG4gIGxldCBwcmVwRmllbGRWYXJzID0gZnVuY3Rpb24oJGZpZWxkLCBpc05ldyA9IGZhbHNlKSB7XG4gICAgbGV0IGZpZWxkID0ge307XG4gICAgaWYgKCRmaWVsZCBpbnN0YW5jZW9mIGpRdWVyeSkge1xuICAgICAgbGV0IHthdHRycywgbGFiZWx9ID0gYUZpZWxkc1skZmllbGRbMF0uZGF0YXNldC50eXBlXTtcbiAgICAgIGlmIChhRmllbGRzWyRmaWVsZFswXS5kYXRhc2V0LnR5cGVdKSB7XG4gICAgICAgIGZpZWxkID0gT2JqZWN0LmFzc2lnbih7fSwgYXR0cnMpO1xuICAgICAgICBmaWVsZC5sYWJlbCA9IGxhYmVsO1xuICAgICAgfSBlbHNlIHsgLy8gaXMgZGF0YVR5cGUgWE1MXG4gICAgICAgIGxldCBhdHRycyA9ICRmaWVsZFswXS5hdHRyaWJ1dGVzO1xuICAgICAgICBpZiAoIWlzTmV3KSB7XG4gICAgICAgICAgZmllbGQudmFsdWVzID0gJGZpZWxkLmNoaWxkcmVuKCkubWFwKChpbmRleCwgZWxlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICQoZWxlbSkudGV4dCgpLFxuICAgICAgICAgICAgICB2YWx1ZTogJChlbGVtKS5hdHRyKCd2YWx1ZScpLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogQm9vbGVhbigkKGVsZW0pLmF0dHIoJ3NlbGVjdGVkJykpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgZmllbGRbYXR0cnNbaV0ubmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZCA9IE9iamVjdC5hc3NpZ24oe30sICRmaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKCFmaWVsZC5uYW1lKSB7XG4gICAgICBmaWVsZC5uYW1lID0gdXRpbHMubmFtZUF0dHIoZmllbGQpO1xuICAgIH1cblxuICAgIGlmIChpc05ldyAmJiB1dGlscy5pbkFycmF5KGZpZWxkLnR5cGUsXG4gICAgICBbJ3RleHQnLFxuICAgICAgICdudW1iZXInLFxuICAgICAgICdmaWxlJyxcbiAgICAgICAnZGF0ZScsXG4gICAgICAgJ3NlbGVjdCcsXG4gICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICAnYXV0b2NvbXBsZXRlJ10pKSB7XG4gICAgICBmaWVsZC5jbGFzc05hbWUgPSBmaWVsZC5jbGFzc05hbWUgfHwgJ2Zvcm0tY29udHJvbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkLmNsYXNzTmFtZSA9IGZpZWxkLmNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBsZXQgbWF0Y2ggPSAvKD86XnxcXHMpYnRuLSguKj8pKD86XFxzfCQpL2cuZXhlYyhmaWVsZC5jbGFzc05hbWUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgZmllbGQuc3R5bGUgPSBtYXRjaFsxXTtcbiAgICB9XG5cbiAgICB1dGlscy5lc2NhcGVBdHRycyhmaWVsZCk7XG5cbiAgICBhcHBlbmROZXdGaWVsZChmaWVsZCwgaXNOZXcpO1xuXG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5maWVsZEFkZGVkKTtcbiAgICB9XG5cbiAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LnJlbW92ZSgnZW1wdHknKTtcbiAgfTtcblxuICAvLyBQYXJzZSBzYXZlZCBYTUwgdGVtcGxhdGUgZGF0YVxuICBsZXQgbG9hZEZpZWxkcyA9IGZ1bmN0aW9uKGZvcm1EYXRhKSB7XG4gICAgZm9ybURhdGEgPSBoZWxwZXJzLmdldERhdGEoZm9ybURhdGEpO1xuICAgIGlmIChmb3JtRGF0YSAmJiBmb3JtRGF0YS5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGZpZWxkRGF0YSA9IHV0aWxzLnRyaW1PYmooZm9ybURhdGFbaV0pO1xuICAgICAgICBwcmVwRmllbGRWYXJzKGZpZWxkRGF0YSk7XG4gICAgICB9XG4gICAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LnJlbW92ZSgnZW1wdHknKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMuZGVmYXVsdEZpZWxkcyAmJiBvcHRzLmRlZmF1bHRGaWVsZHMubGVuZ3RoKSB7XG4gICAgICAvLyBMb2FkIGRlZmF1bHQgZmllbGRzIGlmIG5vbmUgYXJlIHNldFxuICAgICAgb3B0cy5kZWZhdWx0RmllbGRzLmZvckVhY2goZmllbGQgPT4gcHJlcEZpZWxkVmFycyhmaWVsZCkpO1xuICAgICAgc3RhZ2VXcmFwLmNsYXNzTGlzdC5yZW1vdmUoJ2VtcHR5Jyk7XG4gICAgfSBlbHNlIGlmICghb3B0cy5wcmVwZW5kICYmICFvcHRzLmFwcGVuZCkge1xuICAgICAgc3RhZ2VXcmFwLmNsYXNzTGlzdC5hZGQoJ2VtcHR5Jyk7XG4gICAgICBzdGFnZVdyYXAuZGF0YXNldC5jb250ZW50ID0gaTE4bi5nZXRTdGFydGVkO1xuICAgIH1cbiAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcblxuICAgIGlmIChub25FZGl0YWJsZUZpZWxkcygpKSB7XG4gICAgICBzdGFnZVdyYXAuY2xhc3NMaXN0LnJlbW92ZSgnZW1wdHknKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBkYXRhIGZvciBmaWVsZCB3aXRoIG9wdGlvbnMgW3NlbGVjdCwgY2hlY2tib3gtZ3JvdXAsIHJhZGlvLWdyb3VwXVxuICAgKlxuICAgKiBAdG9kbyAgIHJlZmFjdG9yIHRoaXMgbmFzdHkgfmNyYXB+IGNvZGUsIGl0cyBhY3R1YWxseSBwYWluZnVsIHRvIGxvb2sgYXRcbiAgICogQHBhcmFtICB7T2JqZWN0fSB2YWx1ZXNcbiAgICogQHJldHVybiB7U3RyaW5nfSBmaWVsZCBvcHRpb25zIG1hcmt1cFxuICAgKi9cbiAgbGV0IGZpZWxkT3B0aW9ucyA9IGZ1bmN0aW9uKGZpZWxkRGF0YSkge1xuICAgIGxldCBvcHRpb25BY3Rpb25zID0gW1xuICAgICAgICB1dGlscy5tYXJrdXAoJ2EnLCBpMThuLmFkZE9wdGlvbiwge2NsYXNzTmFtZTogJ2FkZCBhZGQtb3B0J30pXG4gICAgICBdO1xuICAgIGxldCBmaWVsZE9wdGlvbnMgPSBbXG4gICAgICBgPGxhYmVsIGNsYXNzPVwiZmFsc2UtbGFiZWxcIj4ke2kxOG4uc2VsZWN0T3B0aW9uc308L2xhYmVsPmBcbiAgICBdO1xuICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBmaWVsZERhdGEubXVsdGlwbGUgfHwgKGZpZWxkRGF0YS50eXBlID09PSAnY2hlY2tib3gtZ3JvdXAnKTtcbiAgICBjb25zdCBvcHRpb25EYXRhVGVtcGxhdGUgPSBsYWJlbCA9PiB7XG4gICAgICBsZXQgb3B0aW9uRGF0YSA9IHtcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICB2YWx1ZTogdXRpbHMuaHlwaGVuQ2FzZShsYWJlbClcbiAgICAgIH07XG5cbiAgICAgIGlmIChmaWVsZERhdGEudHlwZSAhPT0gJ2F1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgb3B0aW9uRGF0YS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3B0aW9uRGF0YTtcbiAgICB9O1xuXG4gICAgaWYgKCFmaWVsZERhdGEudmFsdWVzIHx8ICFmaWVsZERhdGEudmFsdWVzLmxlbmd0aCkge1xuICAgICAgbGV0IGRlZmF1bHRPcHRDb3VudCA9IHV0aWxzLmluQXJyYXkoZmllbGREYXRhLnR5cGUsIFsnY2hlY2tib3gtZ3JvdXAnLCAnY2hlY2tib3gnXSkgPyBbMV0gOiBbMSwgMiwgM107XG4gICAgICBmaWVsZERhdGEudmFsdWVzID0gZGVmYXVsdE9wdENvdW50Lm1hcChmdW5jdGlvbihpbmRleCkge1xuICAgICAgICBsZXQgbGFiZWwgPSBgJHtpMThuLm9wdGlvbn0gJHtpbmRleH1gO1xuICAgICAgICByZXR1cm4gb3B0aW9uRGF0YVRlbXBsYXRlKGxhYmVsKTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IGZpcnN0T3B0aW9uID0gZmllbGREYXRhLnZhbHVlc1swXTtcbiAgICAgIGlmIChmaXJzdE9wdGlvbi5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0ZWQnKSkge1xuICAgICAgICBmaXJzdE9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuc3VyZSBvcHRpb24gZGF0YSBpcyBoYXMgYWxsIHJlcXVpcmVkIGtleXNcbiAgICAgIGZpZWxkRGF0YS52YWx1ZXMuZm9yRWFjaChvcHRpb24gPT4gT2JqZWN0LmFzc2lnbih7fSwge3NlbGVjdGVkOiBmYWxzZX0sIG9wdGlvbikpO1xuICAgIH1cblxuICAgIGZpZWxkT3B0aW9ucy5wdXNoKCc8ZGl2IGNsYXNzPVwic29ydGFibGUtb3B0aW9ucy13cmFwXCI+Jyk7XG5cbiAgICBmaWVsZE9wdGlvbnMucHVzaCgnPG9sIGNsYXNzPVwic29ydGFibGUtb3B0aW9uc1wiPicpO1xuICAgIHV0aWxzLmZvckVhY2goZmllbGREYXRhLnZhbHVlcywgaSA9PiB7XG4gICAgICBmaWVsZE9wdGlvbnMucHVzaChzZWxlY3RGaWVsZE9wdGlvbnMoZmllbGREYXRhLm5hbWUsIGZpZWxkRGF0YS52YWx1ZXNbaV0sIGlzTXVsdGlwbGUpKTtcbiAgICB9KTtcbiAgICBmaWVsZE9wdGlvbnMucHVzaCgnPC9vbD4nKTtcbiAgICBmaWVsZE9wdGlvbnMucHVzaCh1dGlscy5tYXJrdXAoJ2RpdicsIG9wdGlvbkFjdGlvbnMsIHtjbGFzc05hbWU6ICdvcHRpb24tYWN0aW9ucyd9KS5vdXRlckhUTUwpO1xuICAgIGZpZWxkT3B0aW9ucy5wdXNoKCc8L2Rpdj4nKTtcblxuICAgIHJldHVybiB1dGlscy5tYXJrdXAoJ2RpdicsIGZpZWxkT3B0aW9ucy5qb2luKCcnKSwge2NsYXNzTmFtZTogJ2Zvcm0tZ3JvdXAgZmllbGQtb3B0aW9ucyd9KS5vdXRlckhUTUw7XG4gIH07XG5cbiAgY29uc3QgZGVmYXVsdEZpZWxkQXR0cnMgPSB0eXBlID0+IHtcbiAgICBjb25zdCBkZWZhdWx0QXR0cnMgPSBbXG4gICAgICAncmVxdWlyZWQnLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAnbmFtZScsXG4gICAgICAnYWNjZXNzJyxcbiAgICAgICd2YWx1ZSdcbiAgICBdO1xuICAgIGxldCBub1ZhbEZpZWxkcyA9IFsnaGVhZGVyJywgJ3BhcmFncmFwaCcsICdmaWxlJywgJ2F1dG9jb21wbGV0ZSddLmNvbmNhdChkLm9wdGlvbkZpZWxkcyk7XG4gICAgbGV0IHZhbHVlRmllbGQgPSAhdXRpbHMuaW5BcnJheSh0eXBlLCBub1ZhbEZpZWxkcyk7XG5cbiAgICBjb25zdCB0eXBlQXR0cnNNYXAgPSB7XG4gICAgICBhdXRvY29tcGxldGU6IGRlZmF1bHRBdHRycy5jb25jYXQoW1xuICAgICAgICAnb3B0aW9ucycsXG4gICAgICBdKSxcbiAgICAgIGJ1dHRvbjogW1xuICAgICAgICAnbGFiZWwnLFxuICAgICAgICAnc3VidHlwZScsXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgICdjbGFzc05hbWUnLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICdhY2Nlc3MnLFxuICAgICAgXSxcbiAgICAgIGNoZWNrYm94OiBbXG4gICAgICAgICdyZXF1aXJlZCcsXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICd0b2dnbGUnLFxuICAgICAgICAnaW5saW5lJyxcbiAgICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ2FjY2VzcycsXG4gICAgICAgICdvdGhlcicsXG4gICAgICAgICdvcHRpb25zJyxcbiAgICAgIF0sXG4gICAgICB0ZXh0OiBkZWZhdWx0QXR0cnMuY29uY2F0KFtcbiAgICAgICAgJ3N1YnR5cGUnLFxuICAgICAgICAnbWF4bGVuZ3RoJyxcbiAgICAgIF0pLFxuICAgICAgZGF0ZTogZGVmYXVsdEF0dHJzLFxuICAgICAgZmlsZTogZGVmYXVsdEF0dHJzLmNvbmNhdChbXG4gICAgICAgICdtdWx0aXBsZSdcbiAgICAgIF0pLFxuICAgICAgaGVhZGVyOiBbXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdzdWJ0eXBlJyxcbiAgICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAgICdhY2Nlc3MnLFxuICAgICAgXSxcbiAgICAgIGhpZGRlbjogW1xuICAgICAgICAnbmFtZScsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICdhY2Nlc3MnLFxuICAgICAgXSxcbiAgICAgIHBhcmFncmFwaDogW1xuICAgICAgICAnbGFiZWwnLFxuICAgICAgICAnc3VidHlwZScsXG4gICAgICAgICdjbGFzc05hbWUnLFxuICAgICAgICAnYWNjZXNzJyxcbiAgICAgIF0sXG4gICAgICBudW1iZXI6IGRlZmF1bHRBdHRycy5jb25jYXQoW1xuICAgICAgICAnbWluJyxcbiAgICAgICAgJ21heCcsXG4gICAgICAgICdzdGVwJyxcbiAgICAgIF0pLFxuICAgICAgc2VsZWN0OiBkZWZhdWx0QXR0cnMuY29uY2F0KFtcbiAgICAgICAgJ211bHRpcGxlJyxcbiAgICAgICAgJ29wdGlvbnMnLFxuICAgICAgXSksXG4gICAgICB0ZXh0YXJlYTogZGVmYXVsdEF0dHJzLmNvbmNhdChbXG4gICAgICAgICdzdWJ0eXBlJyxcbiAgICAgICAgJ21heGxlbmd0aCcsXG4gICAgICAgICdyb3dzJyxcbiAgICAgIF0pLFxuXG4gICAgfTtcblxuICAgIHR5cGVBdHRyc01hcFsnY2hlY2tib3gtZ3JvdXAnXSA9IHR5cGVBdHRyc01hcC5jaGVja2JveDtcbiAgICB0eXBlQXR0cnNNYXBbJ3JhZGlvLWdyb3VwJ10gPSB0eXBlQXR0cnNNYXAuY2hlY2tib3g7XG5cbiAgICBsZXQgdHlwZUF0dHJzID0gdHlwZUF0dHJzTWFwW3R5cGVdO1xuXG4gICAgaWYgKHR5cGUgPT09ICdyYWRpby1ncm91cCcpIHtcbiAgICAgIHV0aWxzLnJlbW92ZSgndG9nZ2xlJywgdHlwZUF0dHJzKTtcbiAgICB9XG5cbiAgICAvLyBIZWxwIFRleHQgLyBEZXNjcmlwdGlvbiBGaWVsZFxuICAgIGlmICh1dGlscy5pbkFycmF5KHR5cGUsIFsnaGVhZGVyJywgJ3BhcmFncmFwaCcsICdidXR0b24nXSkpIHtcbiAgICAgIHV0aWxzLnJlbW92ZSgnZGVzY3JpcHRpb24nLCB0eXBlQXR0cnMpO1xuICAgIH1cblxuICAgIGlmICghdmFsdWVGaWVsZCkge1xuICAgICAgdXRpbHMucmVtb3ZlKCd2YWx1ZScsIHR5cGVBdHRycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVBdHRycyB8fCBkZWZhdWx0QXR0cnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBlZGl0YWJsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmllbGRcbiAgICogQHBhcmFtICB7b2JqZWN0fSB2YWx1ZXMgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGFkdmFuY2VkIGZpZWxkc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICBtYXJrdXAgZm9yIGFkdmFuY2VkIGZpZWxkc1xuICAgKi9cbiAgbGV0IGFkdkZpZWxkcyA9IHZhbHVlcyA9PiB7XG4gICAgbGV0IGFkdkZpZWxkcyA9IFtdO1xuICAgIGxldCBmaWVsZEF0dHJzID0gZGVmYXVsdEZpZWxkQXR0cnModmFsdWVzLnR5cGUpO1xuICAgIGNvbnN0IGFkdkZpZWxkTWFwID0ge1xuICAgICAgcmVxdWlyZWQ6ICgpID0+IHJlcXVpcmVkRmllbGQodmFsdWVzKSxcbiAgICAgIHRvZ2dsZTogKCkgPT4gYm9vbEF0dHJpYnV0ZSgndG9nZ2xlJywgdmFsdWVzLCB7Zmlyc3Q6IGkxOG4udG9nZ2xlfSksXG4gICAgICBpbmxpbmU6ICgpID0+IHtcbiAgICAgICAgbGV0IGxhYmVscyA9IHtcbiAgICAgICAgICBmaXJzdDogaTE4bi5pbmxpbmUsXG4gICAgICAgICAgc2Vjb25kOiBtaTE4bi5nZXQoJ2lubGluZURlc2MnLCB2YWx1ZXMudHlwZS5yZXBsYWNlKCctZ3JvdXAnLCAnJykpXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGJvb2xBdHRyaWJ1dGUoJ2lubGluZScsIHZhbHVlcywgbGFiZWxzKTtcbiAgICAgIH0sXG4gICAgICBsYWJlbDogKCkgPT4gdGV4dEF0dHJpYnV0ZSgnbGFiZWwnLCB2YWx1ZXMpLFxuICAgICAgZGVzY3JpcHRpb246ICgpID0+IHRleHRBdHRyaWJ1dGUoJ2Rlc2NyaXB0aW9uJywgdmFsdWVzKSxcbiAgICAgIHN1YnR5cGU6ICgpID0+IHNlbGVjdEF0dHJpYnV0ZSgnc3VidHlwZScsIHZhbHVlcywgc3VidHlwZXNbdmFsdWVzLnR5cGVdKSxcbiAgICAgIHN0eWxlOiAoKSA9PiBidG5TdHlsZXModmFsdWVzLnN0eWxlKSxcbiAgICAgIHBsYWNlaG9sZGVyOiAoKSA9PiB0ZXh0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIHZhbHVlcyksXG4gICAgICByb3dzOiAoKSA9PiBudW1iZXJBdHRyaWJ1dGUoJ3Jvd3MnLCB2YWx1ZXMpLFxuICAgICAgY2xhc3NOYW1lOiAoKSA9PiB0ZXh0QXR0cmlidXRlKCdjbGFzc05hbWUnLCB2YWx1ZXMpLFxuICAgICAgbmFtZTogKCkgPT4gdGV4dEF0dHJpYnV0ZSgnbmFtZScsIHZhbHVlcyksXG4gICAgICB2YWx1ZTogKCkgPT4gdGV4dEF0dHJpYnV0ZSgndmFsdWUnLCB2YWx1ZXMpLFxuICAgICAgbWF4bGVuZ3RoOiAoKSA9PiBudW1iZXJBdHRyaWJ1dGUoJ21heGxlbmd0aCcsIHZhbHVlcyksXG4gICAgICBhY2Nlc3M6ICgpID0+IHtcbiAgICAgICAgbGV0IHJvbGVzRGlzcGxheSA9IHZhbHVlcy5yb2xlICE9PSB1bmRlZmluZWQgPyAnc3R5bGU9XCJkaXNwbGF5OmJsb2NrXCInIDogJyc7XG4gICAgICAgIGxldCBhdmFpbGFibGVSb2xlcyA9IFtcbiAgICAgICAgICBgPGRpdiBjbGFzcz1cImF2YWlsYWJsZS1yb2xlc1wiICR7cm9sZXNEaXNwbGF5fT5gXG4gICAgICAgIF07XG4gICAgICAgIGZvciAoa2V5IGluIG9wdHMucm9sZXMpIHtcbiAgICAgICAgICBpZiAob3B0cy5yb2xlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBsZXQgY2hlY2tlZCA9IHV0aWxzLmluQXJyYXkoa2V5LCByb2xlcykgPyAnY2hlY2tlZCcgOiAnJztcbiAgICAgICAgICAgIGxldCByb2xlSWQgPSBgZmxkLSR7ZGF0YS5sYXN0SUR9LXJvbGVzLSR7a2V5fWA7XG4gICAgICAgICAgICBhdmFpbGFibGVSb2xlcy5wdXNoKGA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInJvbGVzW11cIiB2YWx1ZT1cIiR7a2V5fVwiIGlkPVwiJHtyb2xlSWR9XCIgJHtjaGVja2VkfSBjbGFzcz1cInJvbGVzLWZpZWxkXCIgLz4gPGxhYmVsIGZvcj1cIiR7cm9sZUlkfVwiPiR7b3B0cy5yb2xlc1trZXldfTwvbGFiZWw+PGJyLz5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXZhaWxhYmxlUm9sZXMucHVzaCgnPC9kaXY+Jyk7XG4gICAgICAgIGxldCBhY2Nlc3NMYWJlbHMgPSB7Zmlyc3Q6IGkxOG4ucm9sZXMsIHNlY29uZDogaTE4bi5saW1pdFJvbGUsIGNvbnRlbnQ6IGF2YWlsYWJsZVJvbGVzLmpvaW4oJycpfTtcblxuICAgICAgICByZXR1cm4gYm9vbEF0dHJpYnV0ZSgnYWNjZXNzJywgdmFsdWVzLCBhY2Nlc3NMYWJlbHMpO1xuICAgICAgfSxcbiAgICAgIG90aGVyOiAoKSA9PiBib29sQXR0cmlidXRlKCdvdGhlcicsIHZhbHVlcywge2ZpcnN0OiBpMThuLmVuYWJsZU90aGVyLCBzZWNvbmQ6IGkxOG4uZW5hYmxlT3RoZXJNc2d9KSxcbiAgICAgIG9wdGlvbnM6ICgpID0+IGZpZWxkT3B0aW9ucyh2YWx1ZXMpXG4gICAgfTtcbiAgICBsZXQga2V5O1xuICAgIGxldCByb2xlcyA9IHZhbHVlcy5yb2xlICE9PSB1bmRlZmluZWQgPyB2YWx1ZXMucm9sZS5zcGxpdCgnLCcpIDogW107XG4gICAgbGV0IG51bUF0dHJzID0gWydtaW4nLCAnbWF4JywgJ3N0ZXAnXTtcblxuICAgIGlmICh2YWx1ZXMudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIG51bUF0dHJzLmZvckVhY2gobnVtQXR0ciA9PiB7XG4gICAgICAgIGFkdkZpZWxkTWFwW251bUF0dHJdID0gKCkgPT4gbnVtYmVyQXR0cmlidXRlKG51bUF0dHIsIHZhbHVlcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgYWR2RmllbGRNYXBbJ211bHRpcGxlJ10gPSAoKSA9PiB7XG4gICAgICAgIGxldCBsYWJlbHMgPSB7XG4gICAgICAgICAgZmlyc3Q6IGkxOG4ubXVsdGlwbGVGaWxlcyxcbiAgICAgICAgICBzZWNvbmQ6IGkxOG4uYWxsb3dNdWx0aXBsZUZpbGVzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBib29sQXR0cmlidXRlKCdtdWx0aXBsZScsIHZhbHVlcywgbGFiZWxzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlcy50eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgYWR2RmllbGRNYXBbJ211bHRpcGxlJ10gPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBib29sQXR0cmlidXRlKCdtdWx0aXBsZScsIHZhbHVlcywge2ZpcnN0OiAnICcsIHNlY29uZDogaTE4bi5zZWxlY3Rpb25zTWVzc2FnZX0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhmaWVsZEF0dHJzKS5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgIGxldCBhdHRyID0gZmllbGRBdHRyc1tpbmRleF07XG4gICAgICBsZXQgdXNlRGVmYXVsdEF0dHIgPSBbdHJ1ZV07XG5cbiAgICAgIGlmIChvcHRzLnR5cGVVc2VyRGlzYWJsZWRBdHRyc1t2YWx1ZXMudHlwZV0pIHtcbiAgICAgICAgbGV0IHR5cGVEaXNhYmxlZEF0dHJzID0gb3B0cy50eXBlVXNlckRpc2FibGVkQXR0cnNbdmFsdWVzLnR5cGVdO1xuICAgICAgICB1c2VEZWZhdWx0QXR0ci5wdXNoKCF1dGlscy5pbkFycmF5KGF0dHIsIHR5cGVEaXNhYmxlZEF0dHJzKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdKSB7XG4gICAgICAgIGxldCB1c2VyQXR0cnMgPSBPYmplY3Qua2V5cyhvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdKTtcbiAgICAgICAgdXNlRGVmYXVsdEF0dHIucHVzaCghdXRpbHMuaW5BcnJheShhdHRyLCB1c2VyQXR0cnMpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmluQXJyYXkoYXR0ciwgb3B0cy5kaXNhYmxlZEF0dHJzKSkge1xuICAgICAgICB1c2VEZWZhdWx0QXR0ci5wdXNoKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVzZURlZmF1bHRBdHRyLmV2ZXJ5KHVzZSA9PiB1c2UgPT09IHRydWUpKSB7XG4gICAgICAgIGFkdkZpZWxkcy5wdXNoKGFkdkZpZWxkTWFwW2F0dHJdKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQXBwZW5kIGN1c3RvbSBhdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdHlwZVVzZXJBdHRycyBvcHRpb25cbiAgICBpZiAob3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXSkge1xuICAgICAgYWR2RmllbGRzLnB1c2gocHJvY2Vzc1R5cGVVc2VyQXR0cnMob3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXSwgdmFsdWVzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkdkZpZWxkcy5qb2luKCcnKTtcbiAgfTtcblxuICAvKipcbiAgICogUHJvY2Vzc2VzIHR5cGVVc2VyQXR0cnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSB0eXBlVXNlckF0dHIgb3B0aW9uXG4gICAqIEBwYXJhbSAge09iamVjdH0gdmFsdWVzICAgICAgIGZpZWxkIGF0dHJpYnV0ZXNcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgICAgICAgbWFya3VwIGZvciBjdXN0b20gdXNlciBhdHRyaWJ1dGVzXG4gICAqL1xuICBmdW5jdGlvbiBwcm9jZXNzVHlwZVVzZXJBdHRycyh0eXBlVXNlckF0dHIsIHZhbHVlcykge1xuICAgIGxldCBhZHZGaWVsZCA9IFtdO1xuXG4gICAgZm9yIChsZXQgYXR0cmlidXRlIGluIHR5cGVVc2VyQXR0cikge1xuICAgICAgaWYgKHR5cGVVc2VyQXR0ci5oYXNPd25Qcm9wZXJ0eShhdHRyaWJ1dGUpKSB7XG4gICAgICAgIGxldCBvcmlnID0gaTE4blthdHRyaWJ1dGVdO1xuICAgICAgICBsZXQgb3JpZ1ZhbHVlID0gdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0udmFsdWU7XG4gICAgICAgIHR5cGVVc2VyQXR0clthdHRyaWJ1dGVdLnZhbHVlID0gdmFsdWVzW2F0dHJpYnV0ZV0gfHwgdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0udmFsdWUgfHwgJyc7XG5cbiAgICAgICAgaWYgKHR5cGVVc2VyQXR0clthdHRyaWJ1dGVdLmxhYmVsKSB7XG4gICAgICAgICAgaTE4blthdHRyaWJ1dGVdID0gdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0ubGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0ub3B0aW9ucykge1xuICAgICAgICAgIGFkdkZpZWxkLnB1c2goc2VsZWN0VXNlckF0dHJzKGF0dHJpYnV0ZSwgdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZHZGaWVsZC5wdXNoKGlucHV0VXNlckF0dHJzKGF0dHJpYnV0ZSwgdHlwZVVzZXJBdHRyW2F0dHJpYnV0ZV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkxOG5bYXR0cmlidXRlXSA9IG9yaWc7XG4gICAgICAgIHR5cGVVc2VyQXR0clthdHRyaWJ1dGVdLnZhbHVlID0gb3JpZ1ZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZHZGaWVsZC5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXh0IGlucHV0IHZhbHVlIGZvciBhdHRyaWJ1dGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSAge09iamVjdH0gYXR0cnMgYWxzbyBrbm93biBhcyB2YWx1ZXNcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgICBpbnB1dCBtYXJrdXBcbiAgICovXG4gIGZ1bmN0aW9uIGlucHV0VXNlckF0dHJzKG5hbWUsIGF0dHJzKSB7XG4gICAgbGV0IHRleHRBdHRycyA9IHtcbiAgICAgICAgaWQ6IG5hbWUgKyAnLScgKyBkYXRhLmxhc3RJRCxcbiAgICAgICAgdGl0bGU6IGF0dHJzLmRlc2NyaXB0aW9uIHx8IGF0dHJzLmxhYmVsIHx8IG5hbWUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdHlwZTogYXR0cnMudHlwZSB8fCAndGV4dCcsXG4gICAgICAgIGNsYXNzTmFtZTogW2BmbGQtJHtuYW1lfWBdXG4gICAgICB9O1xuICAgIGxldCBsYWJlbCA9IGA8bGFiZWwgZm9yPVwiJHt0ZXh0QXR0cnMuaWR9XCI+JHtpMThuW25hbWVdfTwvbGFiZWw+YDtcblxuICAgIGlmICghdXRpbHMuaW5BcnJheSh0ZXh0QXR0cnMudHlwZSwgWydjaGVja2JveCcsICdjaGVja2JveC1ncm91cCcsICdyYWRpby1ncm91cCddKSkge1xuICAgICAgdGV4dEF0dHJzLmNsYXNzTmFtZS5wdXNoKCdmb3JtLWNvbnRyb2wnKTtcbiAgICB9XG5cbiAgICB0ZXh0QXR0cnMgPSBPYmplY3QuYXNzaWduKHt9LCBhdHRycywgdGV4dEF0dHJzKTtcbiAgICBsZXQgdGV4dElucHV0ID0gYDxpbnB1dCAke3V0aWxzLmF0dHJTdHJpbmcodGV4dEF0dHJzKX0+YDtcbiAgICBsZXQgaW5wdXRXcmFwID0gYDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+JHt0ZXh0SW5wdXR9PC9kaXY+YDtcbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICR7bmFtZX0td3JhcFwiPiR7bGFiZWx9JHtpbnB1dFdyYXB9PC9kaXY+YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgaW5wdXQgZm9yIG11bHRpcGxlIGNob2ljZSB1c2VyIGF0dHJpYnV0ZXNcbiAgICogQHRvZG8gIHJlcGxhY2Ugd2l0aCBzZWxlY3RBdHRyXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgIHNlbGVjdCBtYXJrdXBcbiAgICovXG4gIGZ1bmN0aW9uIHNlbGVjdFVzZXJBdHRycyhuYW1lLCBvcHRpb25zKSB7XG4gICAgbGV0IG9wdGlzID0gT2JqZWN0LmtleXMob3B0aW9ucy5vcHRpb25zKS5tYXAodmFsID0+IHtcbiAgICAgIGxldCBhdHRycyA9IHt2YWx1ZTogdmFsfTtcbiAgICAgIGlmICh2YWwgPT09IG9wdGlvbnMudmFsdWUpIHtcbiAgICAgICAgYXR0cnMuc2VsZWN0ZWQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8b3B0aW9uICR7dXRpbHMuYXR0clN0cmluZyhhdHRycyl9PiR7b3B0aW9ucy5vcHRpb25zW3ZhbF19PC9vcHRpb24+YDtcbiAgICB9KTtcbiAgICBsZXQgc2VsZWN0QXR0cnMgPSB7XG4gICAgICBpZDogbmFtZSArICctJyArIGRhdGEubGFzdElELFxuICAgICAgdGl0bGU6IG9wdGlvbnMuZGVzY3JpcHRpb24gfHwgb3B0aW9ucy5sYWJlbCB8fCBuYW1lLnRvVXBwZXJDYXNlKCksXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgY2xhc3NOYW1lOiBgZmxkLSR7bmFtZX0gZm9ybS1jb250cm9sYFxuICAgIH07XG4gICAgbGV0IGxhYmVsID0gYDxsYWJlbCBmb3I9XCIke3NlbGVjdEF0dHJzLmlkfVwiPiR7aTE4bltuYW1lXX08L2xhYmVsPmA7XG5cbiAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5maWx0ZXIocHJvcCA9PiB7XG4gICAgICByZXR1cm4gIXV0aWxzLmluQXJyYXkocHJvcCwgWyd2YWx1ZScsICdvcHRpb25zJywgJ2xhYmVsJ10pO1xuICAgIH0pLmZvckVhY2goZnVuY3Rpb24oYXR0cikge1xuICAgICAgc2VsZWN0QXR0cnNbYXR0cl0gPSBvcHRpb25zW2F0dHJdO1xuICAgIH0pO1xuXG4gICAgbGV0IHNlbGVjdCA9IGA8c2VsZWN0ICR7dXRpbHMuYXR0clN0cmluZyhzZWxlY3RBdHRycyl9PiR7b3B0aXMuam9pbignJyl9PC9zZWxlY3Q+YDtcbiAgICBsZXQgaW5wdXRXcmFwID0gYDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+JHtzZWxlY3R9PC9kaXY+YDtcbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICR7bmFtZX0td3JhcFwiPiR7bGFiZWx9JHtpbnB1dFdyYXB9PC9kaXY+YDtcbiAgfVxuXG4gIGxldCBib29sQXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSwgdmFsdWVzLCBsYWJlbHMpIHtcbiAgICBpZiAob3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXSAmJiBvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxhYmVsID0gKHR4dCkgPT4ge1xuICAgICAgcmV0dXJuIGA8bGFiZWwgZm9yPVwiJHtuYW1lfS0ke2RhdGEubGFzdElEfVwiPiR7dHh0fTwvbGFiZWw+YDtcbiAgICB9O1xuICAgIGxldCBjaGVja2VkID0gKHZhbHVlc1tuYW1lXSA/ICdjaGVja2VkJyA6ICcnKTtcbiAgICBsZXQgaW5wdXQgPSBgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZmxkLSR7bmFtZX1cIiBuYW1lPVwiJHtuYW1lfVwiIHZhbHVlPVwidHJ1ZVwiICR7Y2hlY2tlZH0gaWQ9XCIke25hbWV9LSR7ZGF0YS5sYXN0SUR9XCIvPiBgO1xuICAgIGxldCBsZWZ0ID0gW107XG4gICAgbGV0IHJpZ2h0ID0gW1xuICAgICAgaW5wdXRcbiAgICBdO1xuXG4gICAgaWYgKGxhYmVscy5maXJzdCkge1xuICAgICAgbGVmdC51bnNoaWZ0KGxhYmVsKGxhYmVscy5maXJzdCkpO1xuICAgIH1cblxuICAgIGlmIChsYWJlbHMuc2Vjb25kKSB7XG4gICAgICByaWdodC5wdXNoKGxhYmVsKGxhYmVscy5zZWNvbmQpKTtcbiAgICB9XG5cbiAgICBpZiAobGFiZWxzLmNvbnRlbnQpIHtcbiAgICAgIHJpZ2h0LnB1c2gobGFiZWxzLmNvbnRlbnQpO1xuICAgIH1cblxuICAgIHJpZ2h0LnVuc2hpZnQoJzxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+Jyk7XG4gICAgcmlnaHQucHVzaCgnPC9kaXY+Jyk7XG5cbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICR7bmFtZX0td3JhcFwiPiR7bGVmdC5jb25jYXQocmlnaHQpLmpvaW4oJycpfTwvZGl2PmA7XG4gIH07XG5cbiAgbGV0IGJ0blN0eWxlcyA9IGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICBsZXQgc3R5bGVzID0gaTE4bi5zdHlsZXMuYnRuO1xuICAgICAgbGV0IHN0eWxlRmllbGQgPSAnJztcblxuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIGxldCBzdHlsZUxhYmVsID0gYDxsYWJlbD4ke2kxOG4uc3R5bGV9PC9sYWJlbD5gO1xuICAgICAgc3R5bGVGaWVsZCArPSBgPGlucHV0IHZhbHVlPVwiJHtzdHlsZX1cIiBuYW1lPVwic3R5bGVcIiB0eXBlPVwiaGlkZGVuXCIgY2xhc3M9XCJidG4tc3R5bGVcIj5gO1xuICAgICAgc3R5bGVGaWVsZCArPSAnPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiPic7XG5cbiAgICAgIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgbGV0IGNsYXNzTGlzdCA9IFsnYnRuLXhzJywgJ2J0bicsIGBidG4tJHtlbGVtZW50fWBdO1xuICAgICAgICBpZiAoc3R5bGUgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICBjbGFzc0xpc3QucHVzaCgnc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlRmllbGQgKz0gYDxidXR0b24gdmFsdWU9XCIke2VsZW1lbnR9XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiJHtjbGFzc0xpc3Quam9pbignICcpfVwiPiR7aTE4bi5zdHlsZXMuYnRuW2VsZW1lbnRdfTwvYnV0dG9uPmA7XG4gICAgICB9KTtcblxuICAgICAgc3R5bGVGaWVsZCArPSAnPC9kaXY+JztcblxuICAgICAgc3R5bGVGaWVsZCA9IGA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBzdHlsZS13cmFwXCI+JHtzdHlsZUxhYmVsfSAke3N0eWxlRmllbGR9PC9kaXY+YDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGVGaWVsZDtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgbnVtYmVyIGF0dHJpYnV0ZSB0byBhIGZpZWxkLlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9IG1hcmt1cCBmb3IgbnVtYmVyIGF0dHJpYnV0ZVxuICAgKi9cbiAgbGV0IG51bWJlckF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dHJpYnV0ZSwgdmFsdWVzKSB7XG4gICAgaWYgKG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV0gJiYgb3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXVthdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGF0dHJWYWwgPSB2YWx1ZXNbYXR0cmlidXRlXTtcbiAgICBsZXQgYXR0ckxhYmVsID0gaTE4blthdHRyaWJ1dGVdIHx8IGF0dHJpYnV0ZTtcbiAgICBsZXQgcGxhY2Vob2xkZXIgPSBpMThuW2BwbGFjZWhvbGRlci4ke2F0dHJpYnV0ZX1gXTtcbiAgICBsZXQgaW5wdXRDb25maWcgPSB7XG4gICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgIHZhbHVlOiBhdHRyVmFsLFxuICAgICAgbmFtZTogYXR0cmlidXRlLFxuICAgICAgbWluOiAnMCcsXG4gICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICBjbGFzc05hbWU6IGBmbGQtJHthdHRyaWJ1dGV9IGZvcm0tY29udHJvbGAsXG4gICAgICBpZDogYCR7YXR0cmlidXRlfS0ke2RhdGEubGFzdElEfWBcbiAgICB9O1xuICAgIGxldCBudW1iZXJBdHRyaWJ1dGUgPSBgPGlucHV0ICR7dXRpbHMuYXR0clN0cmluZyh1dGlscy50cmltT2JqKGlucHV0Q29uZmlnKSl9PmA7XG4gICAgbGV0IGlucHV0V3JhcCA9IGA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcFwiPiR7bnVtYmVyQXR0cmlidXRlfTwvZGl2PmA7XG5cbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICR7YXR0cmlidXRlfS13cmFwXCI+PGxhYmVsIGZvcj1cIiR7aW5wdXRDb25maWcuaWR9XCI+JHthdHRyTGFiZWx9PC9sYWJlbD4gJHtpbnB1dFdyYXB9PC9kaXY+YDtcbiAgfTtcblxuICAvKipcbiAgICogc2VsZWN0QXR0cmlidXRlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXR0cmlidXRlICBhdHRyaWJ1dGUgbmFtZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHZhbHVlcyAgICAgYWthIGF0dHJzXG4gICAqIEBwYXJhbSAge0FycmF5fSBvcHRpb25EYXRhICBzZWxlY3QgZmllbGQgb3B0aW9uIGRhdGFcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgICAgIHNlbGVjdCBpbnB1dCBtYWtydXBcbiAgICovXG4gIGxldCBzZWxlY3RBdHRyaWJ1dGUgPSBmdW5jdGlvbihhdHRyaWJ1dGUsIHZhbHVlcywgb3B0aW9uRGF0YSkge1xuICAgIGlmIChvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdICYmIG9wdHMudHlwZVVzZXJBdHRyc1t2YWx1ZXMudHlwZV1bYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc2VsZWN0T3B0aW9ucyA9IG9wdGlvbkRhdGEubWFwKChvcHRpb24sIGkpID0+IHtcbiAgICAgIGxldCBvcHRpb25BdHRycyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBsYWJlbDogYCR7aTE4bi5vcHRpb259ICR7aX1gLFxuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgICB9LCBvcHRpb24pO1xuICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWVzW2F0dHJpYnV0ZV0pIHtcbiAgICAgICAgb3B0aW9uQXR0cnMuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8b3B0aW9uICR7dXRpbHMuYXR0clN0cmluZyh1dGlscy50cmltT2JqKG9wdGlvbkF0dHJzKSl9PiR7b3B0aW9uQXR0cnMubGFiZWx9PC9vcHRpb24+YDtcbiAgICB9KTtcbiAgICBsZXQgc2VsZWN0QXR0cnMgPSB7XG4gICAgICAgIGlkOiBhdHRyaWJ1dGUgKyAnLScgKyBkYXRhLmxhc3RJRCxcbiAgICAgICAgbmFtZTogYXR0cmlidXRlLFxuICAgICAgICBjbGFzc05hbWU6IGBmbGQtJHthdHRyaWJ1dGV9IGZvcm0tY29udHJvbGBcbiAgICAgIH07XG4gICAgbGV0IGxhYmVsID0gYDxsYWJlbCBmb3I9XCIke3NlbGVjdEF0dHJzLmlkfVwiPiR7aTE4blthdHRyaWJ1dGVdIHx8IHV0aWxzLmNhcGl0YWxpemUoYXR0cmlidXRlKX08L2xhYmVsPmA7XG4gICAgbGV0IHNlbGVjdCA9IGA8c2VsZWN0ICR7dXRpbHMuYXR0clN0cmluZyhzZWxlY3RBdHRycyl9PiR7c2VsZWN0T3B0aW9ucy5qb2luKCcnKX08L3NlbGVjdD5gO1xuICAgIGxldCBpbnB1dFdyYXAgPSBgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj4ke3NlbGVjdH08L2Rpdj5gO1xuXG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCAke3NlbGVjdEF0dHJzLm5hbWV9LXdyYXBcIj4ke2xhYmVsfSR7aW5wdXRXcmFwfTwvZGl2PmA7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNvbWUgdGV4dCBpbnB1dHMgZm9yIGZpZWxkIGF0dHJpYnV0ZXMsICoqd2lsbCBiZSByZXBsYWNlZCoqXG4gICAqIEBwYXJhbSAge1N0cmluZ30gYXR0cmlidXRlXG4gICAqIEBwYXJhbSAge09iamVjdH0gdmFsdWVzXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICovXG4gIGxldCB0ZXh0QXR0cmlidXRlID0gZnVuY3Rpb24oYXR0cmlidXRlLCB2YWx1ZXMpIHtcbiAgICBpZiAob3B0cy50eXBlVXNlckF0dHJzW3ZhbHVlcy50eXBlXSAmJiBvcHRzLnR5cGVVc2VyQXR0cnNbdmFsdWVzLnR5cGVdW2F0dHJpYnV0ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcGxhY2Vob2xkZXJGaWVsZHMgPSBbXG4gICAgICAndGV4dCcsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3NlbGVjdCcsXG4gICAgICAnYXV0b2NvbXBsZXRlJ1xuICAgIF07XG5cbiAgICBsZXQgbm9OYW1lID0gW1xuICAgICAgJ2hlYWRlcicsXG4gICAgICAncGFyYWdyYXBoJ1xuICAgIF07XG5cbiAgICBsZXQgdGV4dEFyZWEgPSBbJ3BhcmFncmFwaCddO1xuXG4gICAgbGV0IGF0dHJWYWwgPSB2YWx1ZXNbYXR0cmlidXRlXSB8fCAnJztcbiAgICBsZXQgYXR0ckxhYmVsID0gaTE4blthdHRyaWJ1dGVdO1xuXG4gICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ2xhYmVsJykge1xuICAgICAgaWYgKHV0aWxzLmluQXJyYXkodmFsdWVzLnR5cGUsIHRleHRBcmVhKSkge1xuICAgICAgICBhdHRyTGFiZWwgPSBpMThuLmNvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRyVmFsID0gdXRpbHMucGFyc2VkSHRtbCh2YWx1ZXNbYXR0cmlidXRlXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1YnR5cGVzLmhlYWRlcikge1xuICAgICAgbm9OYW1lID0gbm9OYW1lLmNvbmNhdChzdWJ0eXBlcy5oZWFkZXIpO1xuICAgIH1cblxuICAgIGxldCBwbGFjZWhvbGRlciA9IGkxOG5bYHBsYWNlaG9sZGVyLiR7YXR0cmlidXRlfWBdIHx8ICcnO1xuICAgIGxldCBhdHRyaWJ1dGVmaWVsZCA9ICcnO1xuICAgIGxldCBub01ha2VBdHRyID0gW107XG5cbiAgICAvLyBGaWVsZCBoYXMgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiAhdXRpbHMuaW5BcnJheSh2YWx1ZXMudHlwZSwgcGxhY2Vob2xkZXJGaWVsZHMpKSB7XG4gICAgICBub01ha2VBdHRyLnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gRmllbGQgaGFzIG5hbWUgYXR0cmlidXRlXG4gICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ25hbWUnICYmIHV0aWxzLmluQXJyYXkodmFsdWVzLnR5cGUsIG5vTmFtZSkpIHtcbiAgICAgIG5vTWFrZUF0dHIucHVzaCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoIW5vTWFrZUF0dHIuc29tZShlbGVtID0+IGVsZW0gPT09IHRydWUpKSB7XG4gICAgICBsZXQgaW5wdXRDb25maWcgPSB7XG4gICAgICAgIG5hbWU6IGF0dHJpYnV0ZSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgICBjbGFzc05hbWU6IGBmbGQtJHthdHRyaWJ1dGV9IGZvcm0tY29udHJvbGAsXG4gICAgICAgIGlkOiBgJHthdHRyaWJ1dGV9LSR7ZGF0YS5sYXN0SUR9YFxuICAgICAgfTtcbiAgICAgIGxldCBhdHRyaWJ1dGVMYWJlbCA9IGA8bGFiZWwgZm9yPVwiJHtpbnB1dENvbmZpZy5pZH1cIj4ke2F0dHJMYWJlbH08L2xhYmVsPmA7XG5cbiAgICAgIGlmIChhdHRyaWJ1dGUgPT09ICdsYWJlbCcpIHtcbiAgICAgICAgYXR0cmlidXRlZmllbGQgKz0gYDxkaXYgY29udGVudGVkaXRhYmxlICR7dXRpbHMuYXR0clN0cmluZyhpbnB1dENvbmZpZyl9PiR7YXR0clZhbH08L2Rpdj5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRDb25maWcudmFsdWUgPSBhdHRyVmFsO1xuICAgICAgICBpbnB1dENvbmZpZy50eXBlID0gJ3RleHQnO1xuICAgICAgICBhdHRyaWJ1dGVmaWVsZCArPSBgPGlucHV0ICR7dXRpbHMuYXR0clN0cmluZyhpbnB1dENvbmZpZyl9PmA7XG4gICAgICB9XG5cbiAgICAgIGxldCBpbnB1dFdyYXAgPSBgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj4ke2F0dHJpYnV0ZWZpZWxkfTwvZGl2PmA7XG5cbiAgICAgIGxldCB2aXNpYmlsaXR5ID0gJ2Jsb2NrJztcbiAgICAgIGlmIChhdHRyaWJ1dGUgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgdmlzaWJpbGl0eSA9IHZhbHVlcy5zdWJ0eXBlICYmIHZhbHVlcy5zdWJ0eXBlID09PSAncXVpbGwnICYmICdub25lJztcbiAgICAgIH1cblxuICAgICAgYXR0cmlidXRlZmllbGQgPSBgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgJHthdHRyaWJ1dGV9LXdyYXBcIiBzdHlsZT1cImRpc3BsYXk6ICR7dmlzaWJpbGl0eX1cIj4ke2F0dHJpYnV0ZUxhYmVsfSAke2lucHV0V3JhcH08L2Rpdj5gO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVmaWVsZDtcbiAgfTtcblxuICBsZXQgcmVxdWlyZWRGaWVsZCA9IGZ1bmN0aW9uKHZhbHVlcykge1xuICAgIGxldCBub1JlcXVpcmUgPSBbXG4gICAgICAgICdoZWFkZXInLFxuICAgICAgICAncGFyYWdyYXBoJyxcbiAgICAgICAgJ2J1dHRvbidcbiAgICAgIF07XG4gICAgbGV0IG5vTWFrZSA9IFtdO1xuICAgIGxldCByZXF1aXJlRmllbGQgPSAnJztcblxuICAgIGlmICh1dGlscy5pbkFycmF5KHZhbHVlcy50eXBlLCBub1JlcXVpcmUpKSB7XG4gICAgICBub01ha2UucHVzaCh0cnVlKTtcbiAgICB9XG4gICAgaWYgKCFub01ha2Uuc29tZShlbGVtID0+IGVsZW0gPT09IHRydWUpKSB7XG4gICAgICByZXF1aXJlRmllbGQgPSBib29sQXR0cmlidXRlKCdyZXF1aXJlZCcsIHZhbHVlcywge2ZpcnN0OiBpMThuLnJlcXVpcmVkfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVpcmVGaWVsZDtcbiAgfTtcblxuICAvLyBBcHBlbmQgdGhlIG5ldyBmaWVsZCB0byB0aGUgZWRpdG9yXG4gIGxldCBhcHBlbmROZXdGaWVsZCA9IGZ1bmN0aW9uKHZhbHVlcywgaXNOZXcgPSB0cnVlKSB7XG4gICAgbGV0IHR5cGUgPSB2YWx1ZXMudHlwZSB8fCAndGV4dCc7XG4gICAgbGV0IGxhYmVsID0gdmFsdWVzLmxhYmVsIHx8IGkxOG5bdHlwZV0gfHwgaTE4bi5sYWJlbDtcbiAgICBsZXQgZGVsQnRuID0gbSgnYScsIGkxOG4ucmVtb3ZlLCB7XG4gICAgICAgIGlkOiAnZGVsXycgKyBkYXRhLmxhc3RJRCxcbiAgICAgICAgY2xhc3NOYW1lOiAnZGVsLWJ1dHRvbiBidG4gZGVsZXRlLWNvbmZpcm0nLFxuICAgICAgICB0aXRsZTogaTE4bi5yZW1vdmVNZXNzYWdlXG4gICAgICB9KTtcbiAgICBsZXQgdG9nZ2xlQnRuID0gbSgnYScsIG51bGwsIHtcbiAgICAgIGlkOiBkYXRhLmxhc3RJRCArICctZWRpdCcsXG4gICAgICBjbGFzc05hbWU6ICd0b2dnbGUtZm9ybSBidG4gaWNvbi1wZW5jaWwnLFxuICAgICAgdGl0bGU6IGkxOG4uaGlkZVxuICAgIH0pO1xuICAgIGxldCBjb3B5QnRuID0gbSgnYScsIG51bGwsIHtcbiAgICAgIGlkOiBkYXRhLmxhc3RJRCArICctY29weScsXG4gICAgICBjbGFzc05hbWU6ICdjb3B5LWJ1dHRvbiBidG4gaWNvbi1jb3B5JyxcbiAgICAgIHRpdGxlOiBpMThuLmNvcHlCdXR0b25Ub29sdGlwXG4gICAgfSk7XG5cbiAgICBsZXQgbGlDb250ZW50cyA9IG0oXG4gICAgICAnZGl2JywgW3RvZ2dsZUJ0biwgY29weUJ0biwgZGVsQnRuXSwge2NsYXNzTmFtZTogJ2ZpZWxkLWFjdGlvbnMnfVxuICAgICkub3V0ZXJIVE1MO1xuXG4gICAgbGlDb250ZW50cyArPSBgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj4ke3V0aWxzLnBhcnNlZEh0bWwobGFiZWwpfTwvbGFiZWw+YDtcbiAgICBsZXQgcmVxdWlyZWREaXNwbGF5ID0gdmFsdWVzLnJlcXVpcmVkID8gJ3N0eWxlPVwiZGlzcGxheTppbmxpbmVcIicgOiAnJztcbiAgICBsaUNvbnRlbnRzICs9IGA8c3BhbiBjbGFzcz1cInJlcXVpcmVkLWFzdGVyaXNrXCIgJHtyZXF1aXJlZERpc3BsYXl9PiAqPC9zcGFuPmA7XG5cbiAgICBsZXQgZGVzY0F0dHJzID0ge1xuICAgICAgY2xhc3NOYW1lOiAndG9vbHRpcC1lbGVtZW50JyxcbiAgICAgIHRvb2x0aXA6IHZhbHVlcy5kZXNjcmlwdGlvbixcbiAgICAgIHN0eWxlOiB2YWx1ZXMuZGVzY3JpcHRpb24gPyAnZGlzcGxheTppbmxpbmUtYmxvY2snIDogJ2Rpc3BsYXk6bm9uZSdcbiAgICB9O1xuICAgIGxpQ29udGVudHMgKz0gYDxzcGFuICR7dXRpbHMuYXR0clN0cmluZyhkZXNjQXR0cnMpfT4/PC9zcGFuPmA7XG5cbiAgICBsaUNvbnRlbnRzICs9IG0oJ2RpdicsICcnLCB7Y2xhc3NOYW1lOiAncHJldi1ob2xkZXInfSkub3V0ZXJIVE1MO1xuICAgIGxpQ29udGVudHMgKz0gYDxkaXYgaWQ9XCIke2RhdGEubGFzdElEfS1ob2xkZXJcIiBjbGFzcz1cImZybS1ob2xkZXJcIj5gO1xuICAgIGxpQ29udGVudHMgKz0gJzxkaXYgY2xhc3M9XCJmb3JtLWVsZW1lbnRzXCI+JztcblxuICAgIGxpQ29udGVudHMgKz0gYWR2RmllbGRzKHZhbHVlcyk7XG4gICAgbGlDb250ZW50cyArPSBtKCdhJywgaTE4bi5jbG9zZSwge2NsYXNzTmFtZTogJ2Nsb3NlLWZpZWxkJ30pLm91dGVySFRNTDtcblxuICAgIGxpQ29udGVudHMgKz0gJzwvZGl2Pic7XG4gICAgbGlDb250ZW50cyArPSAnPC9kaXY+JztcblxuICAgIGxldCBmaWVsZCA9IG0oJ2xpJywgbGlDb250ZW50cywge1xuICAgICAgICAnY2xhc3MnOiB0eXBlICsgJy1maWVsZCBmb3JtLWZpZWxkJyxcbiAgICAgICAgJ3R5cGUnOiB0eXBlLFxuICAgICAgICBpZDogZGF0YS5sYXN0SURcbiAgICAgIH0pO1xuICAgIGxldCAkbGkgPSAkKGZpZWxkKTtcblxuICAgICRsaS5kYXRhKCdmaWVsZERhdGEnLCB7YXR0cnM6IHZhbHVlc30pO1xuXG4gICAgaWYgKHR5cGVvZiBoZWxwZXJzLnN0b3BJbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICQoJz4gbGknLCBkLnN0YWdlKS5lcShoZWxwZXJzLnN0b3BJbmRleCkuYmVmb3JlKCRsaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICRzdGFnZS5hcHBlbmQoJGxpKTtcbiAgICB9XG5cbiAgICAkKCcuc29ydGFibGUtb3B0aW9ucycsICRsaSlcbiAgICAuc29ydGFibGUoe3VwZGF0ZTogKCkgPT4gaGVscGVycy51cGRhdGVQcmV2aWV3KCRsaSl9KTtcblxuICAgIGhlbHBlcnMudXBkYXRlUHJldmlldygkbGkpO1xuXG4gICAgaWYgKG9wdHMudHlwZVVzZXJFdmVudHNbdHlwZV0gJiYgb3B0cy50eXBlVXNlckV2ZW50c1t0eXBlXS5vbmFkZCkge1xuICAgICAgb3B0cy50eXBlVXNlckV2ZW50c1t0eXBlXS5vbmFkZChmaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZWRpdE9uQWRkICYmIGlzTmV3KSB7XG4gICAgICBoZWxwZXJzLmNsb3NlQWxsRWRpdCgpO1xuICAgICAgaGVscGVycy50b2dnbGVFZGl0KGRhdGEubGFzdElELCBmYWxzZSk7XG4gICAgICAvLyBmaWVsZC5zY3JvbGxJbnRvVmlldygpO1xuICAgIH1cblxuICAgIGRhdGEubGFzdElEID0gaGVscGVycy5pbmNyZW1lbnRJZChkYXRhLmxhc3RJRCk7XG4gIH07XG5cbiAgLy8gU2VsZWN0IGZpZWxkIGh0bWwsIHNpbmNlIHRoZXJlIG1heSBiZSBtdWx0aXBsZVxuICBsZXQgc2VsZWN0RmllbGRPcHRpb25zID0gZnVuY3Rpb24obmFtZSwgb3B0aW9uRGF0YSwgbXVsdGlwbGVTZWxlY3QpIHtcbiAgICBsZXQgb3B0aW9uSW5wdXRUeXBlID0ge1xuICAgICAgICBzZWxlY3RlZDogKG11bHRpcGxlU2VsZWN0ID8gJ2NoZWNrYm94JyA6ICdyYWRpbycpXG4gICAgICB9O1xuICAgIGxldCBvcHRpb25EYXRhT3JkZXIgPSBbXG4gICAgICAndmFsdWUnLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgICdzZWxlY3RlZCdcbiAgICBdO1xuICAgIGxldCBvcHRpb25JbnB1dHMgPSBbXTtcbiAgICBsZXQgb3B0aW9uVGVtcGxhdGUgPSB7c2VsZWN0ZWQ6IGZhbHNlLCBsYWJlbDogJycsIHZhbHVlOiAnJ307XG5cbiAgICBvcHRpb25EYXRhID0gT2JqZWN0LmFzc2lnbihvcHRpb25UZW1wbGF0ZSwgb3B0aW9uRGF0YSk7XG5cbiAgICBmb3IgKGxldCBpID0gb3B0aW9uRGF0YU9yZGVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcHJvcCA9IG9wdGlvbkRhdGFPcmRlcltpXTtcbiAgICAgIGlmIChvcHRpb25EYXRhLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgIGxldCBhdHRycyA9IHtcbiAgICAgICAgICB0eXBlOiBvcHRpb25JbnB1dFR5cGVbcHJvcF0gfHwgJ3RleHQnLFxuICAgICAgICAgIGNsYXNzTmFtZTogJ29wdGlvbi0nICsgcHJvcCxcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uRGF0YVtwcm9wXSxcbiAgICAgICAgICBuYW1lOiBuYW1lICsgJy1vcHRpb24nXG4gICAgICAgIH07XG5cbiAgICAgICAgYXR0cnMucGxhY2Vob2xkZXIgPSBpMThuW2BwbGFjZWhvbGRlci4ke3Byb3B9YF0gfHwgJyc7XG5cbiAgICAgICAgaWYgKHByb3AgPT09ICdzZWxlY3RlZCcgJiYgb3B0aW9uRGF0YS5zZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGF0dHJzLmNoZWNrZWQgPSBvcHRpb25EYXRhLnNlbGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9uSW5wdXRzLnB1c2gobSgnaW5wdXQnLCBudWxsLCBhdHRycykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZW1vdmVBdHRycyA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ3JlbW92ZSBidG4nLFxuICAgICAgdGl0bGU6IGkxOG4ucmVtb3ZlTWVzc2FnZVxuICAgIH07XG4gICAgb3B0aW9uSW5wdXRzLnB1c2godXRpbHMubWFya3VwKCdhJywgaTE4bi5yZW1vdmUsIHJlbW92ZUF0dHJzKSk7XG5cbiAgICBsZXQgZmllbGQgPSB1dGlscy5tYXJrdXAoJ2xpJywgb3B0aW9uSW5wdXRzKTtcblxuICAgIHJldHVybiBmaWVsZC5vdXRlckhUTUw7XG4gIH07XG5cbiAgbGV0IGNsb25lSXRlbSA9IGZ1bmN0aW9uIGNsb25lSXRlbShjdXJyZW50SXRlbSkge1xuICAgIGxldCBjdXJyZW50SWQgPSBjdXJyZW50SXRlbS5hdHRyKCdpZCcpO1xuICAgIGxldCB0eXBlID0gY3VycmVudEl0ZW0uYXR0cigndHlwZScpO1xuICAgIGxldCB0cyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGxldCBjbG9uZU5hbWUgPSB0eXBlICsgJy0nICsgdHM7XG4gICAgbGV0ICRjbG9uZSA9IGN1cnJlbnRJdGVtLmNsb25lKCk7XG5cbiAgICAkY2xvbmUuZmluZCgnW2lkXScpLmVhY2goKGksIGVsZW0pID0+IHtcbiAgICAgZWxlbS5pZCA9IGVsZW0uaWQucmVwbGFjZShjdXJyZW50SWQsIGRhdGEubGFzdElEKTtcbiAgICB9KTtcblxuICAgICRjbG9uZS5maW5kKCdbZm9yXScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgIHRoaXMuc2V0QXR0cmlidXRlKCdmb3InLCB0aGlzLmdldEF0dHJpYnV0ZSgnZm9yJykucmVwbGFjZShjdXJyZW50SWQsIGRhdGEubGFzdElEKSk7XG4gICAgfSk7XG5cbiAgICAkY2xvbmUuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICQoJ2U6bm90KC5mb3JtLWVsZW1lbnRzKScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCBuZXdOYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtcbiAgICAgICAgbmV3TmFtZSA9IG5ld05hbWUuc3Vic3RyaW5nKDAsIChuZXdOYW1lLmxhc3RJbmRleE9mKCctJykgKyAxKSk7XG4gICAgICAgIG5ld05hbWUgPSBuZXdOYW1lICsgdHMudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBuZXdOYW1lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgJGNsb25lLmZpbmQoJy5mb3JtLWVsZW1lbnRzJykuZmluZCgnOmlucHV0JykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpID09PSAnbmFtZScpIHtcbiAgICAgICAgbGV0IG5ld1ZhbCA9IHRoaXMuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuICAgICAgICBuZXdWYWwgPSBuZXdWYWwuc3Vic3RyaW5nKDAsIChuZXdWYWwubGFzdEluZGV4T2YoJy0nKSArIDEpKTtcbiAgICAgICAgbmV3VmFsID0gbmV3VmFsICsgdHMudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgbmV3VmFsKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgICRjbG9uZS5hdHRyKCdpZCcsIGRhdGEubGFzdElEKTtcbiAgICAkY2xvbmUuYXR0cignbmFtZScsIGNsb25lTmFtZSk7XG4gICAgJGNsb25lLmFkZENsYXNzKCdjbG9uZWQnKTtcbiAgICAkKCcuc29ydGFibGUtb3B0aW9ucycsICRjbG9uZSkuc29ydGFibGUoKTtcblxuICAgIGlmIChvcHRzLnR5cGVVc2VyRXZlbnRzW3R5cGVdICYmIG9wdHMudHlwZVVzZXJFdmVudHNbdHlwZV0ub25jbG9uZSkge1xuICAgICAgb3B0cy50eXBlVXNlckV2ZW50c1t0eXBlXS5vbmNsb25lKCRjbG9uZVswXSk7XG4gICAgfVxuXG4gICAgZGF0YS5sYXN0SUQgPSBoZWxwZXJzLmluY3JlbWVudElkKGRhdGEubGFzdElEKTtcbiAgICByZXR1cm4gJGNsb25lO1xuICB9O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVRJTElUSUVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvLyBkZWxldGUgb3B0aW9uc1xuICAkc3RhZ2Uub24oJ2NsaWNrIHRvdWNoc3RhcnQnLCAnLnJlbW92ZScsIGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgJGZpZWxkID0gJCh0aGlzKS5wYXJlbnRzKCcuZm9ybS1maWVsZDplcSgwKScpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgb3B0aW9uc0NvdW50ID0gJCh0aGlzKS5wYXJlbnRzKCcuc29ydGFibGUtb3B0aW9uczplcSgwKScpLmNoaWxkcmVuKCdsaScpLmxlbmd0aDtcbiAgICBpZiAob3B0aW9uc0NvdW50IDw9IDIpIHtcbiAgICAgIG9wdHMubm90aWZ5LmVycm9yKCdFcnJvcjogJyArIGkxOG4ubWluT3B0aW9uTWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQodGhpcykucGFyZW50KCdsaScpLnNsaWRlVXAoJzI1MCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAkKHRoaXMpLnJlbW92ZSgpO1xuICAgICAgICBoZWxwZXJzLnVwZGF0ZVByZXZpZXcoJGZpZWxkKTtcbiAgICAgICAgaGVscGVycy5zYXZlLmNhbGwoaGVscGVycyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHRvdWNoIGZvY3VzXG4gICRzdGFnZS5vbigndG91Y2hzdGFydCcsICdpbnB1dCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgJGlucHV0ID0gJCh0aGlzKTtcbiAgICBpZiAoZS5oYW5kbGVkICE9PSB0cnVlKSB7XG4gICAgICBpZiAoJGlucHV0LmF0dHIoJ3R5cGUnKSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAkaW5wdXQudHJpZ2dlcignY2xpY2snKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRpbnB1dC5mb2N1cygpO1xuICAgICAgICBsZXQgZmllbGRWYWwgPSAkaW5wdXQudmFsKCk7XG4gICAgICAgICRpbnB1dC52YWwoZmllbGRWYWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICAvLyB0b2dnbGUgZmllbGRzXG4gICRzdGFnZS5vbignY2xpY2sgdG91Y2hzdGFydCcsICcudG9nZ2xlLWZvcm0sIC5jbG9zZS1maWVsZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoZS5oYW5kbGVkICE9PSB0cnVlKSB7XG4gICAgICBsZXQgdGFyZ2V0SUQgPSAkKGUudGFyZ2V0KS5wYXJlbnRzKCcuZm9ybS1maWVsZDplcSgwKScpLmF0dHIoJ2lkJyk7XG4gICAgICBoZWxwZXJzLnRvZ2dsZUVkaXQodGFyZ2V0SUQpO1xuICAgICAgZS5oYW5kbGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgJHN0YWdlLm9uKCdjaGFuZ2UnLCAnW25hbWU9XCJzdWJ0eXBlXCJdJywgKGUpID0+IHtcbiAgICBjb25zdCAkZmllbGQgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCdsaS5mb3JtLWZpZWxkJyk7XG4gICAgY29uc3QgJHZhbFdyYXAgPSAkKCcudmFsdWUtd3JhcCcsICRmaWVsZCk7XG4gICAgJHZhbFdyYXAudG9nZ2xlKGUudGFyZ2V0LnZhbHVlICE9PSAncXVpbGwnKTtcbiAgfSk7XG5cblxuICAkc3RhZ2Uub24oJ2NoYW5nZScsICcucHJldi1ob2xkZXIgaW5wdXQsIC5wcmV2LWhvbGRlciBzZWxlY3QsIC5wcmV2LWhvbGRlciB0ZXh0YXJlYScsIGUgPT4ge1xuICAgIGxldCBwcmV2T3B0aW9ucztcbiAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdvdGhlci1vcHRpb24nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmllbGQgPSB1dGlscy5jbG9zZXN0KGUudGFyZ2V0LCAnLmZvcm0tZmllbGQnKTtcbiAgICBpZiAodXRpbHMuaW5BcnJheShmaWVsZC50eXBlLCBbJ3NlbGVjdCcsICdjaGVja2JveC1ncm91cCcsICdyYWRpby1ncm91cCddKSkge1xuICAgICAgbGV0IG9wdGlvbnMgPSBmaWVsZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdvcHRpb24tdmFsdWUnKTtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICB1dGlscy5mb3JFYWNoKG9wdGlvbnMsIGkgPT4ge1xuICAgICAgICAgIGxldCBzZWxlY3RlZE9wdGlvbiA9IG9wdGlvbnNbaV0ucGFyZW50RWxlbWVudC5jaGlsZE5vZGVzWzBdO1xuICAgICAgICAgIHNlbGVjdGVkT3B0aW9uLmNoZWNrZWQgPSBlLnRhcmdldC52YWx1ZSA9PT0gb3B0aW9uc1tpXS52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2T3B0aW9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGUudGFyZ2V0Lm5hbWUpO1xuICAgICAgICB1dGlscy5mb3JFYWNoKHByZXZPcHRpb25zLCBpID0+IHtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zW2ldLnBhcmVudEVsZW1lbnQuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbi5jaGVja2VkID0gcHJldk9wdGlvbnNbaV0uY2hlY2tlZDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaWVsZFZhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YWx1ZS0nICsgZmllbGQuaWQpO1xuICAgICAgaWYoZmllbGRWYWwpIHtcbiAgICAgICAgZmllbGRWYWwudmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIHByZXZpZXcgdG8gbGFiZWxcbiAgdXRpbHMuYWRkRXZlbnRMaXN0ZW5lcnMoZC5zdGFnZSwgJ2tleXVwIGNoYW5nZScsIGUgPT4ge1xuICAgIGlmICghZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdmbGQtbGFiZWwnKSkgcmV0dXJuO1xuICAgIGxldCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlIHx8IGUudGFyZ2V0LmlubmVySFRNTDtcbiAgICBsZXQgbGFiZWwgPSB1dGlscy5jbG9zZXN0KGUudGFyZ2V0LCAnLmZvcm0tZmllbGQnKS5xdWVyeVNlbGVjdG9yKCcuZmllbGQtbGFiZWwnKTtcbiAgICBsYWJlbC5pbm5lckhUTUwgPSB1dGlscy5wYXJzZWRIdG1sKHZhbHVlKTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGVycm9yIHN0eWxpbmcgd2hlbiB1c2VycyB0cmllcyB0byBjb3JyZWN0IG1pc3Rha2VcbiAgJHN0YWdlLm9uKCdrZXl1cCcsICdpbnB1dC5lcnJvcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAkKGUudGFyZ2V0KS5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIHByZXZpZXcgZm9yIGRlc2NyaXB0aW9uXG4gICRzdGFnZS5vbigna2V5dXAnLCAnaW5wdXRbbmFtZT1cImRlc2NyaXB0aW9uXCJdJywgZnVuY3Rpb24oZSkge1xuICAgIGxldCAkZmllbGQgPSAkKGUudGFyZ2V0KS5wYXJlbnRzKCcuZm9ybS1maWVsZDplcSgwKScpO1xuICAgIGxldCBjbG9zZXN0VG9vbFRpcCA9ICQoJy50b29sdGlwLWVsZW1lbnQnLCAkZmllbGQpO1xuICAgIGxldCB0dFZhbCA9ICQoZS50YXJnZXQpLnZhbCgpO1xuICAgIGlmICh0dFZhbCAhPT0gJycpIHtcbiAgICAgIGlmICghY2xvc2VzdFRvb2xUaXAubGVuZ3RoKSB7XG4gICAgICAgIGxldCB0dCA9IGA8c3BhbiBjbGFzcz1cInRvb2x0aXAtZWxlbWVudFwiIHRvb2x0aXA9XCIke3R0VmFsfVwiPj88L3NwYW4+YDtcbiAgICAgICAgJCgnLmZpZWxkLWxhYmVsJywgJGZpZWxkKS5hZnRlcih0dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZXN0VG9vbFRpcC5hdHRyKCd0b29sdGlwJywgdHRWYWwpLmNzcygnZGlzcGxheScsICdpbmxpbmUtYmxvY2snKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNsb3Nlc3RUb29sVGlwLmxlbmd0aCkge1xuICAgICAgICBjbG9zZXN0VG9vbFRpcC5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBtdWx0aXBsZSBzZWxlY3Qgb3B0aW9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGUgY2xpY2sgZXZlbnRcbiAgICogQHJldHVybiB7U3RyaW5nfSBuZXdUeXBlXG4gICAqL1xuICAkc3RhZ2Uub24oJ2NoYW5nZScsICcuZmxkLW11bHRpcGxlJywgZSA9PiB7XG4gICAgbGV0IG5ld1R5cGUgPSBlLnRhcmdldC5jaGVja2VkID8gJ2NoZWNrYm94JyA6ICdyYWRpbyc7XG4gICAgbGV0ICRvcHRpb25zID0gJCgnLm9wdGlvbi1zZWxlY3RlZCcsICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5mb3JtLWVsZW1lbnRzJykpO1xuICAgICRvcHRpb25zLmVhY2goaSA9PiAkb3B0aW9uc1tpXS50eXBlID0gbmV3VHlwZSk7XG4gICAgcmV0dXJuIG5ld1R5cGU7XG4gIH0pO1xuXG4gIC8vIGZvcm1hdCBuYW1lIGF0dHJpYnV0ZVxuICAkc3RhZ2Uub24oJ2JsdXInLCAnaW5wdXQuZmxkLW5hbWUnLCBmdW5jdGlvbihlKSB7XG4gICAgZS50YXJnZXQudmFsdWUgPSB1dGlscy5zYWZlbmFtZShlLnRhcmdldC52YWx1ZSk7XG4gICAgaWYgKGUudGFyZ2V0LnZhbHVlID09PSAnJykge1xuICAgICAgJChlLnRhcmdldClcbiAgICAgIC5hZGRDbGFzcygnZmllbGQtZXJyb3InKVxuICAgICAgLmF0dHIoJ3BsYWNlaG9sZGVyJywgaTE4bi5jYW5ub3RCZUVtcHR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJChlLnRhcmdldCkucmVtb3ZlQ2xhc3MoJ2ZpZWxkLWVycm9yJyk7XG4gICAgfVxuICB9KTtcblxuICAkc3RhZ2Uub24oJ2JsdXInLCAnaW5wdXQuZmxkLW1heGxlbmd0aCcsIGUgPT4ge1xuICAgIGUudGFyZ2V0LnZhbHVlID0gdXRpbHMuZm9yY2VOdW1iZXIoZS50YXJnZXQudmFsdWUpO1xuICB9KTtcblxuICAvLyBDb3B5IGZpZWxkXG4gICRzdGFnZS5vbignY2xpY2sgdG91Y2hzdGFydCcsICcuaWNvbi1jb3B5JywgZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgY3VycmVudEl0ZW0gPSAkKGUudGFyZ2V0KS5wYXJlbnQoKS5wYXJlbnQoJ2xpJyk7XG4gICAgbGV0ICRjbG9uZSA9IGNsb25lSXRlbShjdXJyZW50SXRlbSk7XG4gICAgJGNsb25lLmluc2VydEFmdGVyKGN1cnJlbnRJdGVtKTtcbiAgICBoZWxwZXJzLnVwZGF0ZVByZXZpZXcoJGNsb25lKTtcbiAgICBoZWxwZXJzLnNhdmUuY2FsbChoZWxwZXJzKTtcbiAgfSk7XG5cbiAgLy8gRGVsZXRlIGZpZWxkXG4gICRzdGFnZS5vbignY2xpY2sgdG91Y2hzdGFydCcsICcuZGVsZXRlLWNvbmZpcm0nLCBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBidXR0b25Qb3NpdGlvbiA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHBhZ2VYOiBidXR0b25Qb3NpdGlvbi5sZWZ0ICsgKGJ1dHRvblBvc2l0aW9uLndpZHRoIC8gMiksXG4gICAgICAgIHBhZ2VZOiAoYnV0dG9uUG9zaXRpb24udG9wIC0gYm9keVJlY3QudG9wKSAtIDEyXG4gICAgICB9O1xuXG4gICAgbGV0IGRlbGV0ZUlEID0gJChlLnRhcmdldCkucGFyZW50cygnLmZvcm0tZmllbGQ6ZXEoMCknKS5hdHRyKCdpZCcpO1xuICAgIGNvbnN0ICRmaWVsZCA9ICQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVsZXRlSUQpKTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vZGFsQ2xvc2VkJywgZnVuY3Rpb24oKSB7XG4gICAgICAkZmllbGQucmVtb3ZlQ2xhc3MoJ2RlbGV0aW5nJyk7XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdXNlciBpcyBzdXJlIHRoZXkgd2FudCB0byByZW1vdmUgdGhlIGZpZWxkXG4gICAgaWYgKG9wdHMuZmllbGRSZW1vdmVXYXJuKSB7XG4gICAgICBsZXQgd2FybkgzID0gdXRpbHMubWFya3VwKCdoMycsIGkxOG4ud2FybmluZyk7XG4gICAgICBsZXQgd2Fybk1lc3NhZ2UgPSB1dGlscy5tYXJrdXAoJ3AnLCBpMThuLmZpZWxkUmVtb3ZlV2FybmluZyk7XG4gICAgICBoZWxwZXJzLmNvbmZpcm0oW3dhcm5IMywgd2Fybk1lc3NhZ2VdLCAoKSA9PlxuICAgICAgICBoZWxwZXJzLnJlbW92ZUZpZWxkKGRlbGV0ZUlEKSwgY29vcmRzKTtcbiAgICAgICRmaWVsZC5hZGRDbGFzcygnZGVsZXRpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVscGVycy5yZW1vdmVGaWVsZChkZWxldGVJRCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBVcGRhdGUgYnV0dG9uIHN0eWxlIHNlbGVjdGlvblxuICAkc3RhZ2Uub24oJ2NsaWNrJywgJy5zdHlsZS13cmFwIGJ1dHRvbicsIGUgPT4ge1xuICAgIGNvbnN0ICRidXR0b24gPSAkKGUudGFyZ2V0KTtcbiAgICBsZXQgc3R5bGVWYWwgPSAkYnV0dG9uLnZhbCgpO1xuICAgIGxldCAkYnRuU3R5bGUgPSAkYnV0dG9uLnBhcmVudCgpLnByZXYoJy5idG4tc3R5bGUnKTtcbiAgICAkYnRuU3R5bGUudmFsKHN0eWxlVmFsKTtcbiAgICAkYnV0dG9uLnNpYmxpbmdzKCcuYnRuJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgJGJ1dHRvbi5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICBoZWxwZXJzLnVwZGF0ZVByZXZpZXcoJGJ0blN0eWxlLmNsb3Nlc3QoJy5mb3JtLWZpZWxkJykpO1xuICAgIGhlbHBlcnMuc2F2ZS5jYWxsKGhlbHBlcnMpO1xuICB9KTtcblxuICAvLyBBdHRhY2ggYSBjYWxsYmFjayB0byB0b2dnbGUgcmVxdWlyZWQgYXN0ZXJpc2tcbiAgJHN0YWdlLm9uKCdjbGljaycsICcuZmxkLXJlcXVpcmVkJywgZSA9PiB7XG4gICAgJChlLnRhcmdldCkuY2xvc2VzdCgnLmZvcm0tZmllbGQnKS5maW5kKCcucmVxdWlyZWQtYXN0ZXJpc2snKS50b2dnbGUoKTtcbiAgfSk7XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgdG8gdG9nZ2xlIHJvbGVzIHZpc2liaWxpdHlcbiAgJHN0YWdlLm9uKCdjbGljaycsICdpbnB1dC5mbGQtYWNjZXNzJywgZnVuY3Rpb24oZSkge1xuICAgIGxldCByb2xlcyA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5mb3JtLWZpZWxkJykuZmluZCgnLmF2YWlsYWJsZS1yb2xlcycpO1xuICAgIGxldCBlbmFibGVSb2xlc0NCID0gJChlLnRhcmdldCk7XG4gICAgcm9sZXMuc2xpZGVUb2dnbGUoMjUwLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghZW5hYmxlUm9sZXNDQi5pcygnOmNoZWNrZWQnKSkge1xuICAgICAgICAkKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nLCByb2xlcykucmVtb3ZlQXR0cignY2hlY2tlZCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvLyBBdHRhY2ggYSBjYWxsYmFjayB0byBhZGQgbmV3IG9wdGlvbnNcbiAgJHN0YWdlLm9uKCdjbGljaycsICcuYWRkLW9wdCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0ICRvcHRpb25XcmFwID0gJChlLnRhcmdldCkuY2xvc2VzdCgnLmZpZWxkLW9wdGlvbnMnKTtcbiAgICBsZXQgJG11bHRpcGxlID0gJCgnW25hbWU9XCJtdWx0aXBsZVwiXScsICRvcHRpb25XcmFwKTtcbiAgICBsZXQgJGZpcnN0T3B0aW9uID0gJCgnLm9wdGlvbi1zZWxlY3RlZDplcSgwKScsICRvcHRpb25XcmFwKTtcbiAgICBsZXQgaXNNdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCRtdWx0aXBsZS5sZW5ndGgpIHtcbiAgICAgIGlzTXVsdGlwbGUgPSAkbXVsdGlwbGUucHJvcCgnY2hlY2tlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc011bHRpcGxlID0gKCRmaXJzdE9wdGlvbi5hdHRyKCd0eXBlJykgPT09ICdjaGVja2JveCcpO1xuICAgIH1cblxuICAgIGxldCBuYW1lID0gJGZpcnN0T3B0aW9uLmF0dHIoJ25hbWUnKTtcblxuICAgICQoJy5zb3J0YWJsZS1vcHRpb25zJywgJG9wdGlvbldyYXApLmFwcGVuZChzZWxlY3RGaWVsZE9wdGlvbnMobmFtZSwgZmFsc2UsIGlzTXVsdGlwbGUpKTtcbiAgfSk7XG5cbiAgJHN0YWdlLm9uKCdtb3VzZW92ZXIgbW91c2VvdXQnLCAnLnJlbW92ZSwgLmRlbC1idXR0b24nLCBlID0+XG4gICAgJChlLnRhcmdldCkuY2xvc2VzdCgnbGknKS50b2dnbGVDbGFzcygnZGVsZXRlJykpO1xuXG4gIGxvYWRGaWVsZHMoKTtcblxuICAkc3RhZ2UuY3NzKCdtaW4taGVpZ2h0JywgJGNiVUwuaGVpZ2h0KCkpO1xuXG4gIC8vIElmIG9wdGlvbiBzZXQsIGNvbnRyb2xzIHdpbGwgcmVtYWluIGluIHZpZXcgaW4gZWRpdG9yXG4gIGlmIChvcHRzLnN0aWNreUNvbnRyb2xzLmVuYWJsZSkge1xuICAgIGhlbHBlcnMuc3RpY2t5Q29udHJvbHMoJHN0YWdlKTtcbiAgfVxuXG4gIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnRzLmxvYWRlZCk7XG5cbiAgLy8gTWFrZSBhY3Rpb25zIGFjY2Vzc2libGVcbiAgZm9ybUJ1aWxkZXIuYWN0aW9ucyA9IHtcbiAgICBjbGVhckZpZWxkczogYW5pbWF0ZSA9PiBoZWxwZXJzLnJlbW92ZUFsbEZpZWxkcyhkLnN0YWdlLCBhbmltYXRlKSxcbiAgICBzaG93RGF0YTogaGVscGVycy5zaG93RGF0YS5iaW5kKGhlbHBlcnMpLFxuICAgIHNhdmU6IGhlbHBlcnMuc2F2ZS5iaW5kKGhlbHBlcnMpLFxuICAgIGFkZEZpZWxkOiAoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICBoZWxwZXJzLnN0b3BJbmRleCA9IGRhdGEuZm9ybURhdGEubGVuZ3RoID8gaW5kZXggOiB1bmRlZmluZWQ7XG4gICAgICBwcmVwRmllbGRWYXJzKGZpZWxkKTtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnRzLmZpZWxkQWRkZWQpO1xuICAgIH0sXG4gICAgcmVtb3ZlRmllbGQ6IGhlbHBlcnMucmVtb3ZlRmllbGQuYmluZChoZWxwZXJzKSxcbiAgICBnZXREYXRhOiAodHlwZSA9ICdqcycpID0+IHtcbiAgICAgIGNvbnN0IHN0YWdlID0gZC5zdGFnZTtcbiAgICAgIGNvbnN0IGggPSBoZWxwZXJzO1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAganM6ICgpID0+IGgucHJlcERhdGEoc3RhZ2UpLFxuICAgICAgICB4bWw6ICgpID0+IGgueG1sU2F2ZShzdGFnZSksXG4gICAgICAgIGpzb246ICgpID0+IHdpbmRvdy5KU09OLnN0cmluZ2lmeShoLnByZXBEYXRhKHN0YWdlKSwgbnVsbCwgJ1xcdCcpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZGF0YVt0eXBlXSgpO1xuICAgIH0sXG4gICAgc2V0RGF0YTogZm9ybURhdGEgPT4ge1xuICAgICAgaGVscGVycy5yZW1vdmVBbGxGaWVsZHMoZC5zdGFnZSwgZmFsc2UpO1xuICAgICAgbG9hZEZpZWxkcyhmb3JtRGF0YSk7XG4gICAgfSxcbiAgICBzZXRMYW5nOiBhc3luYyBsb2NhbGUgPT4ge1xuICAgICAgYXdhaXQgbWkxOG4uc2V0Q3VycmVudC5jYWxsKG1pMThuLCBsb2NhbGUpO1xuICAgICAgZC5lbXB0eShlbGVtZW50KTtcbiAgICAgIGxldCBmb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcihvcmlnaW5hbE9wdHMsIGVsZW1lbnQpO1xuICAgICAgJChlbGVtZW50KS5kYXRhKCdmb3JtQnVpbGRlcicsIGZvcm1CdWlsZGVyKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGZvcm1CdWlsZGVyO1xufTtcblxuXG4oZnVuY3Rpb24oICQgKSB7XG4gICQuZm4uZm9ybUJ1aWxkZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIGxldCBlbGVtcyA9IHRoaXM7XG4gICAgbGV0IHtpMThuLCAuLi5vcHRzfSA9ICQuZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucywgdHJ1ZSk7XG4gICAgY29uZmlnLm9wdHMgPSBvcHRzO1xuICAgIGxldCBpMThuT3B0cyA9ICQuZXh0ZW5kKHt9LCBkZWZhdWx0STE4biwgaTE4biwgdHJ1ZSk7XG4gICAgbGV0IGluc3RhbmNlID0ge1xuICAgICAgYWN0aW9uczoge1xuICAgICAgICBnZXREYXRhOiBudWxsLFxuICAgICAgICBzZXREYXRhOiBudWxsLFxuICAgICAgICBzYXZlOiBudWxsLFxuICAgICAgICBzaG93RGF0YTogbnVsbCxcbiAgICAgICAgc2V0TGFuZzogbnVsbCxcbiAgICAgICAgYWRkRmllbGQ6IG51bGwsXG4gICAgICAgIHJlbW92ZUZpZWxkOiBudWxsLFxuICAgICAgICBjbGVhckZpZWxkczogbnVsbFxuICAgICAgfSxcbiAgICAgIGdldCBmb3JtRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmFjdGlvbnMuZ2V0RGF0YSgnanNvbicpO1xuICAgICAgfSxcbiAgICAgIHByb21pc2U6IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBtaTE4bi5pbml0KGkxOG5PcHRzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBlbGVtcy5lYWNoKGkgPT4ge1xuICAgICAgICAgICAgbGV0IGZvcm1CdWlsZGVyID0gbmV3IEZvcm1CdWlsZGVyKG9wdHMsIGVsZW1zW2ldKTtcbiAgICAgICAgICAgICQoZWxlbXNbaV0pLmRhdGEoJ2Zvcm1CdWlsZGVyJywgZm9ybUJ1aWxkZXIpO1xuICAgICAgICAgICAgaW5zdGFuY2UuYWN0aW9ucyA9IGZvcm1CdWlsZGVyLmFjdGlvbnM7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGVsZXRlIGluc3RhbmNlLnByb21pc2U7XG4gICAgICAgICAgcmVzb2x2ZShpbnN0YW5jZSk7XG4gICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59KSggalF1ZXJ5ICk7XG4iLCJpbXBvcnQge2luc3RhbmNlRG9tLCBkZWZhdWx0U3VidHlwZXMsIGVtcHR5LCBvcHRpb25GaWVsZHNSZWdFeH0gZnJvbSAnLi9kb20nO1xuaW1wb3J0IHtpbnN0YW5jZURhdGF9IGZyb20gJy4vZGF0YSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgZXZlbnRzIGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCBtaTE4biBmcm9tICdtaTE4bic7XG5pbXBvcnQge2NvbmZpZ30gZnJvbSAnLi9jb25maWcnO1xuXG5jb25zdCBvcHRzID0gY29uZmlnLm9wdHM7XG5jb25zdCBtID0gdXRpbHMubWFya3VwO1xuXG4vKipcbiAqIFV0aWxpdGllcyBzcGVjaWZpYyB0byBmb3JtLWJ1aWxkZXIuanNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGVscGVycyB7XG4gIC8qKlxuICAgKiBTZXR1cCBkZWZhdWx0cywgZ2V0IGluc3RhbmNlIGRhdGEgYW5kIGRvbVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGZvcm1JRCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihmb3JtSUQpIHtcbiAgICB0aGlzLmRhdGEgPSBpbnN0YW5jZURhdGFbZm9ybUlEXTtcbiAgICB0aGlzLmQgPSBpbnN0YW5jZURvbVtmb3JtSURdO1xuICAgIHRoaXMuZG9DYW5jZWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3Igd2hlbiBhIGRyYWcgYmVnaW5zXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSB1aVxuICAgKi9cbiAgc3RhcnRNb3ZpbmcoZXZlbnQsIHVpKSB7XG4gICAgdWkuaXRlbS5zaG93KCkuYWRkQ2xhc3MoJ21vdmluZycpO1xuICAgIHRoaXMuZG9DYW5jZWwgPSB0cnVlO1xuICAgIHRoaXMuZnJvbSA9IHVpLml0ZW0ucGFyZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHdoZW4gYSBkcmFnIGVuZHNcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBldmVudFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHVpXG4gICAqL1xuICBzdG9wTW92aW5nKGV2ZW50LCB1aSkge1xuICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgdWkuaXRlbS5yZW1vdmVDbGFzcygnbW92aW5nJyk7XG4gICAgaWYgKF90aGlzLmRvQ2FuY2VsKSB7XG4gICAgICBpZiAodWkuc2VuZGVyKSB7XG4gICAgICAgICQodWkuc2VuZGVyKS5zb3J0YWJsZSgnY2FuY2VsJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmZyb20uc29ydGFibGUoJ2NhbmNlbCcpO1xuICAgIH1cbiAgICBfdGhpcy5zYXZlKCk7XG4gICAgX3RoaXMuZG9DYW5jZWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBqUXVlcnkgVUkgc29ydGFibGUgYmVmb3JlU3RvcCBjYWxsYmFjayB1c2VkIGZvciBib3RoIGxpc3RzLlxuICAgKiBMb2dpYyBmb3IgY2FuY2VsaW5nIHRoZSBzb3J0IG9yIGRyb3AuXG4gICAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSB1aVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgYmVmb3JlU3RvcChldmVudCwgdWkpIHtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgIGNvbnN0IG9wdHMgPSBjb25maWcub3B0cztcbiAgICBjb25zdCBmb3JtID0gX3RoaXMuZC5zdGFnZTtcbiAgICBsZXQgbGFzdEluZGV4ID0gZm9ybS5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG4gICAgbGV0IGNhbmNlbEFycmF5ID0gW107XG4gICAgX3RoaXMuc3RvcEluZGV4ID0gdWkucGxhY2Vob2xkZXIuaW5kZXgoKSAtIDE7XG5cbiAgICBpZiAoIW9wdHMuc29ydGFibGVDb250cm9scyAmJiB1aS5pdGVtLnBhcmVudCgpLmhhc0NsYXNzKCdmcm1iLWNvbnRyb2wnKSkge1xuICAgICAgY2FuY2VsQXJyYXkucHVzaCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5wcmVwZW5kKSB7XG4gICAgICBjYW5jZWxBcnJheS5wdXNoKF90aGlzLnN0b3BJbmRleCA9PT0gMCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuYXBwZW5kKSB7XG4gICAgICBjYW5jZWxBcnJheS5wdXNoKChfdGhpcy5zdG9wSW5kZXggKyAxKSA9PT0gbGFzdEluZGV4KTtcbiAgICB9XG5cbiAgICBfdGhpcy5kb0NhbmNlbCA9IGNhbmNlbEFycmF5LnNvbWUoZWxlbSA9PiBlbGVtID09PSB0cnVlKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIGdldCBlbGVtZW50IHR5cGUgYW5kIHN1YnR5cGVcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAkZmllbGRcbiAgICogQHJldHVybiB7T2JqZWN0fSB7dHlwZTogJ2ZpZWxkVHlwZScsIHN1YnR5cGU6ICdmaWVsZFN1YlR5cGUnfVxuICAgKi9cbiAgZ2V0VHlwZXMoJGZpZWxkKSB7XG4gICAgbGV0IHR5cGVzID0ge1xuICAgICAgICB0eXBlOiAkZmllbGQuYXR0cigndHlwZScpXG4gICAgICB9O1xuICAgIGxldCBzdWJ0eXBlID0gJCgnLmZsZC1zdWJ0eXBlJywgJGZpZWxkKS52YWwoKTtcblxuICAgIGlmIChzdWJ0eXBlICE9PSB0eXBlcy50eXBlKSB7XG4gICAgICB0eXBlcy5zdWJ0eXBlID0gc3VidHlwZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9wdGlvbiBkYXRhIGZvciBhIGZpZWxkXG4gICAqIEBwYXJhbSAge09iamVjdH0gZmllbGQgalF1ZXJ5IGZpZWxkIG9iamVjdFxuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgIEFycmF5IG9mIG9wdGlvbiB2YWx1ZXNcbiAgICovXG4gIGZpZWxkT3B0aW9uRGF0YShmaWVsZCkge1xuICAgIGxldCBvcHRpb25zID0gW107XG5cbiAgICAkKCcuc29ydGFibGUtb3B0aW9ucyBsaScsIGZpZWxkKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgbGV0ICRvcHRpb24gPSAkKHRoaXMpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSAkKCcub3B0aW9uLXNlbGVjdGVkJywgJG9wdGlvbikuaXMoJzpjaGVja2VkJyk7XG4gICAgICBsZXQgYXR0cnMgPSB7XG4gICAgICAgICAgbGFiZWw6ICQoJy5vcHRpb24tbGFiZWwnLCAkb3B0aW9uKS52YWwoKSxcbiAgICAgICAgICB2YWx1ZTogJCgnLm9wdGlvbi12YWx1ZScsICRvcHRpb24pLnZhbCgpXG4gICAgICAgIH07XG5cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICBhdHRycy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLnB1c2goYXR0cnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogWE1MIHNhdmVcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBmb3JtIHNvcnRhYmxlRmllbGRzIG5vZGVcbiAgICogQHJldHVybiB7U3RyaW5nfSB4bWwgaW4gc3RyaW5nXG4gICAqL1xuICB4bWxTYXZlKGZvcm0pIHtcbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLnByZXBEYXRhKGZvcm0pO1xuICAgIGxldCB4bWwgPSBbJzxmb3JtLXRlbXBsYXRlPlxcblxcdDxmaWVsZHM+J107XG5cbiAgICB1dGlscy5mb3JFYWNoKGZvcm1EYXRhLCBmdW5jdGlvbihmaWVsZEluZGV4LCBmaWVsZCkge1xuICAgICAgbGV0IGZpZWxkQ29udGVudCA9IG51bGw7XG4gICAgICBjb25zdCBvcHRpb25GaWVsZHMgPSBvcHRpb25GaWVsZHNSZWdFeDtcblxuICAgICAgLy8gSGFuZGxlIG9wdGlvbnNcbiAgICAgIGlmIChmaWVsZC50eXBlLm1hdGNoKG9wdGlvbkZpZWxkcykpIHtcbiAgICAgICAgbGV0IG9wdGlvbkRhdGEgPSBmaWVsZC52YWx1ZXM7XG4gICAgICAgIGxldCBvcHRpb25zID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25EYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbiA9IG0oJ29wdGlvbicsIG9wdGlvbkRhdGFbaV0ubGFiZWwsIG9wdGlvbkRhdGFbaV0pLm91dGVySFRNTDtcbiAgICAgICAgICBvcHRpb25zLnB1c2goJ1xcblxcdFxcdFxcdCcgKyBvcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMucHVzaCgnXFxuXFx0XFx0Jyk7XG5cbiAgICAgICAgZmllbGRDb250ZW50ID0gb3B0aW9ucy5qb2luKCcnKTtcbiAgICAgICAgZGVsZXRlIGZpZWxkLnZhbHVlcztcbiAgICAgIH1cblxuICAgICAgbGV0IHhtbEZpZWxkID0gbSgnZmllbGQnLCBmaWVsZENvbnRlbnQsIGZpZWxkKTtcbiAgICAgIHhtbC5wdXNoKCdcXG5cXHRcXHQnICsgeG1sRmllbGQub3V0ZXJIVE1MKTtcbiAgICB9KTtcblxuICAgIHhtbC5wdXNoKCdcXG5cXHQ8L2ZpZWxkcz5cXG48L2Zvcm0tdGVtcGxhdGU+Jyk7XG5cbiAgICByZXR1cm4geG1sLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmb3JtRGF0YSBmcm9tIGVkaXRvciBpbiBKUyBPYmplY3QgZm9ybWF0XG4gICAqIEBwYXJhbSAge09iamVjdH0gZm9ybSBha2Egc3RhZ2UsIERPTSBlbGVtZW50XG4gICAqIEByZXR1cm4ge09iamVjdH0gZm9ybURhdGFcbiAgICovXG4gIHByZXBEYXRhKGZvcm0pIHtcbiAgICBsZXQgZm9ybURhdGEgPSBbXTtcbiAgICBsZXQgZCA9IHRoaXMuZDtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKGZvcm0uY2hpbGROb2Rlcy5sZW5ndGggIT09IDApIHtcbiAgICAgIC8vIGJ1aWxkIGRhdGEgb2JqZWN0XG4gICAgICB1dGlscy5mb3JFYWNoKGZvcm0uY2hpbGROb2RlcywgYXN5bmMgZnVuY3Rpb24oaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGxldCAkZmllbGQgPSAkKGZpZWxkKTtcblxuICAgICAgICBpZiAoISgkZmllbGQuaGFzQ2xhc3MoJ2Rpc2FibGVkLWZpZWxkJykpKSB7XG4gICAgICAgICAgbGV0IGZpZWxkRGF0YSA9IF90aGlzLmdldFR5cGVzKCRmaWVsZCk7XG4gICAgICAgICAgbGV0IHJvbGVWYWxzID0gJCgnLnJvbGVzLWZpZWxkOmNoZWNrZWQnLCBmaWVsZCkubWFwKGVsZW0gPT4gZWxlbS52YWx1ZSkuZ2V0KCk7XG5cbiAgICAgICAgICBfdGhpcy5zZXRBdHRyVmFscyhmaWVsZCwgZmllbGREYXRhKTtcblxuICAgICAgICAgIGlmIChmaWVsZERhdGEuc3VidHlwZSkge1xuICAgICAgICAgICAgaWYgKGZpZWxkRGF0YS5zdWJ0eXBlID09PSAncXVpbGwnKSB7XG4gICAgICAgICAgICAgIGxldCBpZCA9IGAke2ZpZWxkRGF0YS5uYW1lfS1wcmV2aWV3YDtcbiAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mYkVkaXRvcnMucXVpbGxbaWRdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gd2luZG93LmZiRWRpdG9ycy5xdWlsbFtpZF0uaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGluc3RhbmNlLmdldENvbnRlbnRzKCk7XG4gICAgICAgICAgICAgICAgZmllbGREYXRhLnZhbHVlID0gd2luZG93LkpTT04uc3RyaW5naWZ5KGRhdGEub3BzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmKGZpZWxkRGF0YS5zdWJ0eXBlID09PSAndGlueW1jZScgJiYgd2luZG93LnRpbnltY2UpIHtcbiAgICAgICAgICAgICAgbGV0IGlkID0gYCR7ZmllbGREYXRhLm5hbWV9LXByZXZpZXdgO1xuICAgICAgICAgICAgICBpZiAod2luZG93LnRpbnltY2UuZWRpdG9yc1tpZF0pIHtcbiAgICAgICAgICAgICAgICBsZXQgZWRpdG9yID0gd2luZG93LnRpbnltY2UuZWRpdG9yc1tpZF07XG4gICAgICAgICAgICAgICAgZmllbGREYXRhLnZhbHVlID0gZWRpdG9yLmdldENvbnRlbnQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyb2xlVmFscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZpZWxkRGF0YS5yb2xlID0gcm9sZVZhbHMuam9pbignLCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkRGF0YS5jbGFzc05hbWUgPSBmaWVsZERhdGEuY2xhc3NOYW1lIHx8IGZpZWxkRGF0YS5jbGFzcztcblxuICAgICAgICAgIGxldCBtYXRjaCA9IC8oPzpefFxccylidG4tKC4qPykoPzpcXHN8JCkvZy5leGVjKGZpZWxkRGF0YS5jbGFzc05hbWUpO1xuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZmllbGREYXRhLnN0eWxlID0gbWF0Y2hbMV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmllbGREYXRhID0gdXRpbHMudHJpbU9iaihmaWVsZERhdGEpO1xuXG4gICAgICAgICAgbGV0IG11bHRpcGxlRmllbGQgPSBmaWVsZERhdGEudHlwZS5tYXRjaChkLm9wdGlvbkZpZWxkc1JlZ0V4KTtcblxuICAgICAgICAgIGlmIChtdWx0aXBsZUZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZERhdGEudmFsdWVzID0gX3RoaXMuZmllbGRPcHRpb25EYXRhKCRmaWVsZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9ybURhdGEucHVzaChmaWVsZERhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuZCBzZXQgdGhlIGRhdGEgZm9yIGFuIGVkaXRvci4gTWFpbmx5XG4gICAqIGEgd3JhcHBlciBmb3IgaGFuZGxpbmcgZGF0YVR5cGUgb3B0aW9uXG4gICAqIEBwYXJhbSAge09iamVjdH0gZm9ybURhdGFcbiAgICogQHJldHVybiB7T2JqZWN0fSBmb3JtRGF0YVxuICAgKi9cbiAgZ2V0RGF0YShmb3JtRGF0YSkge1xuICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGlmICghZm9ybURhdGEpIHtcbiAgICAgIGZvcm1EYXRhID0gY29uZmlnLm9wdHMuZm9ybURhdGE7XG4gICAgfVxuXG4gICAgaWYgKCFmb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBzZXREYXRhID0ge1xuICAgICAgeG1sOiBmb3JtRGF0YSA9PiB1dGlscy5wYXJzZVhNTChmb3JtRGF0YSksXG4gICAgICBqc29uOiBmb3JtRGF0YSA9PiB3aW5kb3cuSlNPTi5wYXJzZShmb3JtRGF0YSlcbiAgICB9O1xuXG4gICAgZGF0YS5mb3JtRGF0YSA9IHNldERhdGFbY29uZmlnLm9wdHMuZGF0YVR5cGVdKGZvcm1EYXRhKSB8fCBbXTtcblxuICAgIHJldHVybiBkYXRhLmZvcm1EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGFuZCByZXR1cm5zIGZvcm1EYXRhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGFnZSBET00gZWxlbWVudFxuICAgKiBAcmV0dXJuIHtYTUx8SlNPTn0gZm9ybURhdGFcbiAgICovXG4gIHNhdmUoc3RhZ2UpIHtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGlmKCFzdGFnZSkge1xuICAgICAgc3RhZ2UgPSB0aGlzLmQuc3RhZ2U7XG4gICAgfVxuICAgIGxldCBkb1NhdmUgPSB7XG4gICAgICB4bWw6ICgpID0+IF90aGlzLnhtbFNhdmUoc3RhZ2UpLFxuICAgICAganNvbjogKCkgPT5cbiAgICAgIHdpbmRvdy5KU09OLnN0cmluZ2lmeShfdGhpcy5wcmVwRGF0YShzdGFnZSksIG51bGwsICdcXHQnKVxuICAgIH07XG5cbiAgICAvLyBzYXZlIGFjdGlvbiBmb3IgY3VycmVudCBgZGF0YVR5cGVgXG4gICAgZGF0YS5mb3JtRGF0YSA9IGRvU2F2ZVtjb25maWcub3B0cy5kYXRhVHlwZV0oc3RhZ2UpO1xuXG4gICAgLy8gdHJpZ2dlciBmb3JtU2F2ZWQgZXZlbnRcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5mb3JtU2F2ZWQpO1xuICAgIHJldHVybiBkYXRhLmZvcm1EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIGluY3JlbWVudHMgdGhlIGZpZWxkIGlkcyB3aXRoIHN1cHBvcnQgZm9yIG11bHRpcGxlIGVkaXRvcnNcbiAgICogQHBhcmFtICB7U3RyaW5nfSBpZCBmaWVsZCBJRFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgIGluY3JlbWVudGVkIGZpZWxkIElEXG4gICAqL1xuICBpbmNyZW1lbnRJZChpZCkge1xuICAgIGxldCBzcGxpdCA9IGlkLmxhc3RJbmRleE9mKCctJyk7XG4gICAgbGV0IG5ld0ZpZWxkTnVtYmVyID0gcGFyc2VJbnQoaWQuc3Vic3RyaW5nKHNwbGl0ICsgMSkpICsgMTtcbiAgICBsZXQgYmFzZVN0cmluZyA9IGlkLnN1YnN0cmluZygwLCBzcGxpdCk7XG5cbiAgICByZXR1cm4gYCR7YmFzZVN0cmluZ30tJHtuZXdGaWVsZE51bWJlcn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWVzIGZvciBmaWVsZCBhdHRyaWJ1dGVzIGluIHRoZSBlZGl0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGZpZWxkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZERhdGFcbiAgICovXG4gIHNldEF0dHJWYWxzKGZpZWxkLCBmaWVsZERhdGEpIHtcbiAgICBsZXQgYXR0cnMgPSBmaWVsZC5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3MqPVwiZmxkLVwiXScpO1xuICAgIGF0dHJzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICBsZXQgdmFsdWU7XG4gICAgICBsZXQgbmFtZSA9IHV0aWxzLmNhbWVsQ2FzZShhdHRyLmdldEF0dHJpYnV0ZSgnbmFtZScpKTtcbiAgICAgIGlmIChhdHRyLmF0dHJpYnV0ZXNbJ2NvbnRlbnRlZGl0YWJsZSddKSB7XG4gICAgICAgIHZhbHVlID0gYXR0ci5pbm5lckhUTUw7XG4gICAgICB9IGVsc2UgaWYgKGF0dHIudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICB2YWx1ZSA9IGF0dHIuY2hlY2tlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gYXR0ci52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGZpZWxkRGF0YVtuYW1lXSA9IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3QgZmllbGQgYXR0cmlidXRlIHZhbHVlcyBhbmQgY2FsbCBmaWVsZFByZXZpZXcgdG8gZ2VuZXJhdGUgcHJldmlld1xuICAgKiBAcGFyYW0gIHtPYmplY3R9ICRmaWVsZCBqUXVlcnkgRE9NIGVsZW1lbnRcbiAgICovXG4gIHVwZGF0ZVByZXZpZXcoJGZpZWxkKSB7XG4gICAgbGV0IF90aGlzID0gdGhpcztcbiAgICBsZXQgZCA9IHRoaXMuZDtcbiAgICBjb25zdCBmaWVsZENsYXNzID0gJGZpZWxkLmF0dHIoJ2NsYXNzJyk7XG4gICAgbGV0IGZpZWxkID0gJGZpZWxkWzBdO1xuICAgIGlmIChmaWVsZENsYXNzLmluZGV4T2YoJ2lucHV0LWNvbnRyb2wnKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZmllbGRUeXBlID0gJGZpZWxkLmF0dHIoJ3R5cGUnKTtcbiAgICBsZXQgJHByZXZIb2xkZXIgPSAkKCcucHJldi1ob2xkZXInLCBmaWVsZCk7XG4gICAgbGV0IHByZXZpZXdEYXRhID0ge1xuICAgICAgdHlwZTogZmllbGRUeXBlXG4gICAgfTtcbiAgICBsZXQgcHJldmlldztcblxuICAgIF90aGlzLnNldEF0dHJWYWxzKGZpZWxkLCBwcmV2aWV3RGF0YSk7XG5cbiAgICBsZXQgc3R5bGUgPSAkKCcuYnRuLXN0eWxlJywgZmllbGQpLnZhbCgpO1xuICAgIGlmIChzdHlsZSkge1xuICAgICAgcHJldmlld0RhdGEuc3R5bGUgPSBzdHlsZTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGRUeXBlLm1hdGNoKGQub3B0aW9uRmllbGRzUmVnRXgpKSB7XG4gICAgICBwcmV2aWV3RGF0YS52YWx1ZXMgPSBbXTtcbiAgICAgIHByZXZpZXdEYXRhLm11bHRpcGxlID0gJCgnW25hbWU9XCJtdWx0aXBsZVwiXScsIGZpZWxkKS5pcygnOmNoZWNrZWQnKTtcblxuICAgICAgJCgnLnNvcnRhYmxlLW9wdGlvbnMgbGknLCBmaWVsZCkuZWFjaChmdW5jdGlvbihpLCAkb3B0aW9uKSB7XG4gICAgICAgIGxldCBvcHRpb24gPSB7fTtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gJCgnLm9wdGlvbi1zZWxlY3RlZCcsICRvcHRpb24pLmlzKCc6Y2hlY2tlZCcpO1xuICAgICAgICBvcHRpb24udmFsdWUgPSAkKCcub3B0aW9uLXZhbHVlJywgJG9wdGlvbikudmFsKCk7XG4gICAgICAgIG9wdGlvbi5sYWJlbCA9ICQoJy5vcHRpb24tbGFiZWwnLCAkb3B0aW9uKS52YWwoKTtcbiAgICAgICAgcHJldmlld0RhdGEudmFsdWVzLnB1c2gob3B0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXZpZXdEYXRhID0gdXRpbHMudHJpbU9iaihwcmV2aWV3RGF0YSk7XG5cbiAgICBwcmV2aWV3RGF0YS5jbGFzc05hbWUgPSBfdGhpcy5jbGFzc05hbWVzKGZpZWxkLCBwcmV2aWV3RGF0YSk7XG4gICAgJCgnLmZsZC1jbGFzc05hbWUnLCBmaWVsZCkudmFsKHByZXZpZXdEYXRhLmNsYXNzTmFtZSk7XG5cbiAgICAkZmllbGQuZGF0YSgnZmllbGREYXRhJywgcHJldmlld0RhdGEpO1xuICAgIHByZXZpZXcgPSB1dGlscy5nZXRUZW1wbGF0ZShwcmV2aWV3RGF0YSwgdHJ1ZSk7XG5cbiAgICBlbXB0eSgkcHJldkhvbGRlclswXSk7XG4gICAgJHByZXZIb2xkZXJbMF0uYXBwZW5kQ2hpbGQocHJldmlldyk7XG4gICAgcHJldmlldy5kaXNwYXRjaEV2ZW50KGV2ZW50cy5maWVsZFJlbmRlcmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGEgY3VzdG9tIHRvb2x0aXAgZm9yIGRpc2FibGVkIGZpZWxkcy5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBmaWVsZFxuICAgKi9cbiAgZGlzYWJsZWRUVChzdGFnZSkge1xuICAgIGNvbnN0IG1vdmUgPSAoZSwgZWxlbSkgPT4ge1xuICAgICAgY29uc3QgZmllbGRPZmZzZXQgPSBlbGVtLmZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgeCA9IGUuY2xpZW50WCAtIGZpZWxkT2Zmc2V0LmxlZnQgLSAyMTtcbiAgICAgIGNvbnN0IHkgPSBlLmNsaWVudFkgLSBmaWVsZE9mZnNldC50b3AgLSBlbGVtLnR0Lm9mZnNldEhlaWdodCAtIDEyO1xuICAgICAgZWxlbS50dC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7eH1weCwgJHt5fXB4KWA7XG4gICAgfTtcblxuICAgIHN0YWdlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXNhYmxlZC1maWVsZCcpLmZvckVhY2goXG4gICAgICBmaWVsZCA9PiB7XG4gICAgICAgIGxldCB0aXRsZSA9IG9wdHMubWVzc2FnZXMuZmllbGROb25FZGl0YWJsZTtcblxuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICBsZXQgdHQgPSB1dGlscy5tYXJrdXAoJ3AnLCB0aXRsZSwge2NsYXNzTmFtZTogJ2ZybWItdHQnfSk7XG4gICAgICAgICAgZmllbGQuYXBwZW5kQ2hpbGQodHQpO1xuICAgICAgICAgIGZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGUgPT4gbW92ZShlLCB7dHQsIGZpZWxkfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGNsYXNzTmFtZXMgZm9yIGZpZWxkXG4gICAqIEBwYXJhbSAge09iamVjdH0gZmllbGRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBwcmV2aWV3RGF0YVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGNsYXNzTmFtZXNcbiAgICovXG4gIGNsYXNzTmFtZXMoZmllbGQsIHByZXZpZXdEYXRhKSB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IGZpZWxkLnF1ZXJ5U2VsZWN0b3IoJy5mbGQtY2xhc3NOYW1lJyk7XG4gICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGk7XG4gICAgbGV0IHR5cGUgPSBwcmV2aWV3RGF0YS50eXBlO1xuICAgIGxldCBzdHlsZSA9IHByZXZpZXdEYXRhLnN0eWxlO1xuICAgIGxldCBjbGFzc2VzID0gY2xhc3NOYW1lLnZhbHVlLnNwbGl0KCcgJyk7XG4gICAgbGV0IHR5cGVzID0ge1xuICAgICAgYnV0dG9uOiAnYnRuJyxcbiAgICAgIHN1Ym1pdDogJ2J0bidcbiAgICB9O1xuXG4gICAgbGV0IHByaW1hcnlUeXBlID0gdHlwZXNbdHlwZV07XG5cbiAgICBpZiAocHJpbWFyeVR5cGUpIHtcbiAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCByZSA9IG5ldyBSZWdFeHAoYCg/Ol58XFxzKSR7cHJpbWFyeVR5cGV9LSguKj8pKD86XFxzfCQpK2AsICdnJyk7XG4gICAgICAgICAgbGV0IG1hdGNoID0gY2xhc3Nlc1tpXS5tYXRjaChyZSk7XG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2xhc3Nlcy5wdXNoKHByaW1hcnlUeXBlICsgJy0nICsgc3R5bGUpO1xuICAgICAgfVxuICAgICAgY2xhc3Nlcy5wdXNoKHByaW1hcnlUeXBlKTtcbiAgICB9XG5cbiAgICAvLyByZXZlcnNlIHRoZSBhcnJheSB0byBwdXQgY3VzdG9tIGNsYXNzZXMgYXQgZW5kLFxuICAgIC8vIHJlbW92ZSBhbnkgZHVwbGljYXRlcywgY29udmVydCB0byBzdHJpbmcsIHJlbW92ZSB3aGl0ZXNwYWNlXG4gICAgcmV0dXJuIHV0aWxzLnVuaXF1ZShjbGFzc2VzKS5qb2luKCcgJykudHJpbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyBhbmQgb3BlbiBkaWFsb2dcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBvdmVybGF5IEV4aXN0aW5nIG92ZXJsYXkgaWYgdGhlcmUgaXMgb25lXG4gICAqIEBwYXJhbSAge09iamVjdH0gZGlhbG9nICBFeGlzdGluZyBkaWFsb2dcbiAgICovXG4gIGNsb3NlQ29uZmlybShvdmVybGF5LCBkaWFsb2cpIHtcbiAgICBpZiAoIW92ZXJsYXkpIHtcbiAgICAgIG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmb3JtLWJ1aWxkZXItb3ZlcmxheScpWzBdO1xuICAgIH1cbiAgICBpZiAoIWRpYWxvZykge1xuICAgICAgZGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9ybS1idWlsZGVyLWRpYWxvZycpWzBdO1xuICAgIH1cbiAgICBvdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKTtcbiAgICBkaWFsb2cucmVtb3ZlKCk7XG4gICAgb3ZlcmxheS5yZW1vdmUoKTtcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5tb2RhbENsb3NlZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGF5b3V0IGRhdGEgYmFzZWQgb24gY29udHJvbFBvc2l0aW9uIG9wdGlvblxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGNvbnRyb2xQb3NpdGlvbiAnbGVmdCcgb3IgJ3JpZ2h0J1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IGxheW91dCBvYmplY3RcbiAgICovXG4gIGVkaXRvckxheW91dChjb250cm9sUG9zaXRpb24pIHtcbiAgICBsZXQgbGF5b3V0TWFwID0ge1xuICAgICAgbGVmdDoge1xuICAgICAgICBzdGFnZTogJ3B1bGwtcmlnaHQnLFxuICAgICAgICBjb250cm9sczogJ3B1bGwtbGVmdCdcbiAgICAgIH0sXG4gICAgICByaWdodDoge1xuICAgICAgICBzdGFnZTogJ3B1bGwtbGVmdCcsXG4gICAgICAgIGNvbnRyb2xzOiAncHVsbC1yaWdodCdcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGxheW91dE1hcFtjb250cm9sUG9zaXRpb25dID8gbGF5b3V0TWFwW2NvbnRyb2xQb3NpdGlvbl0gOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG92ZXJsYXkgdG8gdGhlIHBhZ2UuIFVzZWQgZm9yIG1vZGFscy5cbiAgICogQHJldHVybiB7T2JqZWN0fSBET00gT2JqZWN0XG4gICAqL1xuICBzaG93T3ZlcmxheSgpIHtcbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgbGV0IG92ZXJsYXkgPSB1dGlscy5tYXJrdXAoJ2RpdicsIG51bGwsIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Zvcm0tYnVpbGRlci1vdmVybGF5J1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XG4gICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7XG5cbiAgICBvdmVybGF5Lm9uY2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLmNsb3NlQ29uZmlybShvdmVybGF5KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG92ZXJsYXk7XG4gIH1cblxuICAvKipcbiAgICogQ3VzdG9tIGNvbmZpcm1hdGlvbiBkaWFsb2dcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgbWVzc2FnZSAgIENvbnRlbnQgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBkaWFsb2dcbiAgICogQHBhcmFtICB7RnVuY30gIHllc0FjdGlvbiBjYWxsYmFjayB0byBmaXJlIGlmIHRoZXkgY29uZmlybVxuICAgKiBAcGFyYW0gIHtCb29sZWFufSBjb29yZHMgICAgbG9jYXRpb24gdG8gcHV0IHRoZSBkaWFsb2dcbiAgICogQHBhcmFtICB7U3RyaW5nfSAgY2xhc3NOYW1lIEN1c3RvbSBjbGFzcyB0byBiZSBhZGRlZCB0byB0aGUgZGlhbG9nXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICBSZWZlcmVuY2UgdG8gdGhlIG1vZGFsXG4gICAqL1xuICBjb25maXJtKG1lc3NhZ2UsIHllc0FjdGlvbiwgY29vcmRzID0gZmFsc2UsIGNsYXNzTmFtZSA9ICcnKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGxldCBpMThuID0gbWkxOG4uY3VycmVudDtcbiAgICBsZXQgb3ZlcmxheSA9IF90aGlzLnNob3dPdmVybGF5KCk7XG4gICAgbGV0IHllcyA9IG0oJ2J1dHRvbicsIGkxOG4ueWVzLCB7XG4gICAgICBjbGFzc05hbWU6ICd5ZXMgYnRuIGJ0bi1zdWNjZXNzIGJ0bi1zbSdcbiAgICB9KTtcbiAgICBsZXQgbm8gPSBtKCdidXR0b24nLCBpMThuLm5vLCB7XG4gICAgICBjbGFzc05hbWU6ICdubyBidG4gYnRuLWRhbmdlciBidG4tc20nXG4gICAgfSk7XG5cbiAgICBuby5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBfdGhpcy5jbG9zZUNvbmZpcm0ob3ZlcmxheSk7XG4gICAgfTtcblxuICAgIHllcy5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICB5ZXNBY3Rpb24oKTtcbiAgICAgIF90aGlzLmNsb3NlQ29uZmlybShvdmVybGF5KTtcbiAgICB9O1xuXG4gICAgbGV0IGJ0bldyYXAgPSBtKCdkaXYnLCBbbm8sIHllc10sIHtjbGFzc05hbWU6ICdidXR0b24td3JhcCd9KTtcblxuICAgIGNsYXNzTmFtZSA9ICdmb3JtLWJ1aWxkZXItZGlhbG9nICcgKyBjbGFzc05hbWU7XG5cbiAgICBsZXQgbWluaU1vZGFsID0gbSgnZGl2JywgW21lc3NhZ2UsIGJ0bldyYXBdLCB7Y2xhc3NOYW1lfSk7XG4gICAgaWYgKCFjb29yZHMpIHtcbiAgICAgIGNvbnN0IGRFID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgY29vcmRzID0ge1xuICAgICAgICBwYWdlWDogTWF0aC5tYXgoZEUuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApIC8gMixcbiAgICAgICAgcGFnZVk6IE1hdGgubWF4KGRFLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApIC8gMlxuICAgICAgfTtcbiAgICAgIG1pbmlNb2RhbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pbmlNb2RhbC5jbGFzc0xpc3QuYWRkKCdwb3NpdGlvbmVkJyk7XG4gICAgfVxuXG4gICAgbWluaU1vZGFsLnN0eWxlLmxlZnQgPSBjb29yZHMucGFnZVggKyAncHgnO1xuICAgIG1pbmlNb2RhbC5zdHlsZS50b3AgPSBjb29yZHMucGFnZVkgKyAncHgnO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtaW5pTW9kYWwpO1xuXG4gICAgeWVzLmZvY3VzKCk7XG4gICAgcmV0dXJuIG1pbmlNb2RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3B1cCBkaWFsb2cgdGhlIGRvZXMgbm90IHJlcXVpcmUgY29uZmlybWF0aW9uLlxuICAgKiBAcGFyYW0gIHtTdHJpbmd8RE9NfEFycmF5fSAgY29udGVudFxuICAgKiBAcGFyYW0gIHtCb29sZWFufSBjb29yZHMgICAgZmFsc2UgaWYgbm8gY29vcmRzIGFyZSBwcm92aWRlZC4gV2l0aG91dCBjb29yZGluYXRlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBvcHVwIHdpbGwgYXBwZWFyIGNlbnRlciBzY3JlZW4uXG4gICAqIEBwYXJhbSAge1N0cmluZ30gIGNsYXNzTmFtZSBjbGFzc25hbWUgdG8gYmUgYWRkZWQgdG8gdGhlIGRpYWxvZ1xuICAgKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgICAgZG9tXG4gICAqL1xuICBkaWFsb2coY29udGVudCwgY29vcmRzID0gZmFsc2UsIGNsYXNzTmFtZSA9ICcnKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGxldCBjbGllbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICBsZXQgY2xpZW50SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBfdGhpcy5zaG93T3ZlcmxheSgpO1xuXG4gICAgY2xhc3NOYW1lID0gJ2Zvcm0tYnVpbGRlci1kaWFsb2cgJyArIGNsYXNzTmFtZTtcblxuICAgIGxldCBtaW5pTW9kYWwgPSB1dGlscy5tYXJrdXAoJ2RpdicsIGNvbnRlbnQsIHtjbGFzc05hbWU6IGNsYXNzTmFtZX0pO1xuICAgIGlmICghY29vcmRzKSB7XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHBhZ2VYOiBNYXRoLm1heChjbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCkgLyAyLFxuICAgICAgICBwYWdlWTogTWF0aC5tYXgoY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCkgLyAyXG4gICAgICB9O1xuICAgICAgbWluaU1vZGFsLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICB9IGVsc2Uge1xuICAgICAgbWluaU1vZGFsLmNsYXNzTGlzdC5hZGQoJ3Bvc2l0aW9uZWQnKTtcbiAgICB9XG5cbiAgICBtaW5pTW9kYWwuc3R5bGUubGVmdCA9IGNvb3Jkcy5wYWdlWCArICdweCc7XG4gICAgbWluaU1vZGFsLnN0eWxlLnRvcCA9IGNvb3Jkcy5wYWdlWSArICdweCc7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1pbmlNb2RhbCk7XG5cbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy5tb2RhbE9wZW5lZCk7XG5cbiAgICBpZiAoY2xhc3NOYW1lLmluZGV4T2YoJ2RhdGEtZGlhbG9nJykgIT09IC0xKSB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50cy52aWV3RGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbmlNb2RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtIGFsbCBmaWVsZHMgd2lsbCBiZSByZW1vdmVkIHRoZW4gcmVtb3ZlIHRoZW1cbiAgICogQHBhcmFtICB7T2JqZWN0fSBlIGNsaWNrIGV2ZW50IG9iamVjdFxuICAgKi9cbiAgY29uZmlybVJlbW92ZUFsbChlKSB7XG4gICAgbGV0IF90aGlzID0gdGhpcztcbiAgICBsZXQgZm9ybUlEID0gZS50YXJnZXQuaWQubWF0Y2goL2ZybWItXFxkezEzfS8pWzBdO1xuICAgIGxldCBzdGFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1JRCk7XG4gICAgbGV0IGkxOG4gPSBtaTE4bi5jdXJyZW50O1xuICAgIGxldCBmaWVsZHMgPSAkKCdsaS5mb3JtLWZpZWxkJywgc3RhZ2UpO1xuICAgIGxldCBidXR0b25Qb3NpdGlvbiA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgbGV0IGNvb3JkcyA9IHtcbiAgICAgIHBhZ2VYOiBidXR0b25Qb3NpdGlvbi5sZWZ0ICsgKGJ1dHRvblBvc2l0aW9uLndpZHRoIC8gMiksXG4gICAgICBwYWdlWTogKGJ1dHRvblBvc2l0aW9uLnRvcCAtIGJvZHlSZWN0LnRvcCkgLSAxMlxuICAgIH07XG5cbiAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xuICAgICAgX3RoaXMuY29uZmlybShpMThuLmNsZWFyQWxsTWVzc2FnZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLnJlbW92ZUFsbEZpZWxkcy5jYWxsKF90aGlzLCBzdGFnZSk7XG4gICAgICAgIGNvbmZpZy5vcHRzLm5vdGlmeS5zdWNjZXNzKGkxOG4uYWxsRmllbGRzUmVtb3ZlZCk7XG4gICAgICAgIGNvbmZpZy5vcHRzLm9uQ2xlYXJBbGwoKTtcbiAgICAgIH0sIGNvb3Jkcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF90aGlzLmRpYWxvZyhpMThuLm5vRmllbGRzVG9DbGVhciwgY29vcmRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZmllbGRzIGZyb20gdGhlIGZvcm1cbiAgICogQHBhcmFtIHtCb29sZWFufSBhbmltYXRlIHdoZXRoZXIgdG8gYW5pbWF0ZSBvciBub3RcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHJlbW92ZUFsbEZpZWxkcyhzdGFnZSwgYW5pbWF0ZSA9IHRydWUpIHtcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgIGxldCBpMThuID0gbWkxOG4uY3VycmVudDtcbiAgICBsZXQgb3B0cyA9IGNvbmZpZy5vcHRzO1xuICAgIGxldCBmaWVsZHMgPSBzdGFnZS5xdWVyeVNlbGVjdG9yQWxsKCdsaS5mb3JtLWZpZWxkJyk7XG4gICAgbGV0IG1hcmtFbXB0eUFycmF5ID0gW107XG5cbiAgICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5wcmVwZW5kKSB7XG4gICAgICBtYXJrRW1wdHlBcnJheS5wdXNoKHRydWUpO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmFwcGVuZCkge1xuICAgICAgbWFya0VtcHR5QXJyYXkucHVzaCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hcmtFbXB0eUFycmF5LnNvbWUoZWxlbSA9PiBlbGVtID09PSB0cnVlKSkge1xuICAgICAgc3RhZ2UucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdlbXB0eScpO1xuICAgICAgc3RhZ2UucGFyZW50RWxlbWVudC5kYXRhc2V0LmNvbnRlbnQgPSBpMThuLmdldFN0YXJ0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKGFuaW1hdGUpIHtcbiAgICAgIHN0YWdlLmNsYXNzTGlzdC5hZGQoJ3JlbW92aW5nJyk7XG4gICAgICBsZXQgb3V0ZXJIZWlnaHQgPSAwO1xuICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4gb3V0ZXJIZWlnaHQgKz0gZmllbGQub2Zmc2V0SGVpZ2h0ICsgMyk7XG4gICAgICBmaWVsZHNbMF0uc3R5bGUubWFyZ2luVG9wID0gYCR7LW91dGVySGVpZ2h0fXB4YDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbXB0eShzdGFnZSkuY2xhc3NMaXN0LnJlbW92ZSgncmVtb3ZpbmcnKTtcbiAgICAgICAgX3RoaXMuc2F2ZShzdGFnZSk7XG4gICAgICB9LCA0MDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbXB0eShzdGFnZSk7XG4gICAgICBfdGhpcy5zYXZlKHN0YWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdXNlciByZS1vcmRlcnMgdGhlIGVsZW1lbnRzIHRoZWlyIG9yZGVyIHNob3VsZCBiZSBzYXZlZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICRjYlVMIG91ciBsaXN0IG9mIGVsZW1lbnRzXG4gICAqL1xuICBzZXRGaWVsZE9yZGVyKCRjYlVMKSB7XG4gICAgaWYgKCFjb25maWcub3B0cy5zb3J0YWJsZUNvbnRyb2xzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGZpZWxkT3JkZXIgPSB7fTtcblxuICAgICRjYlVMLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xuICAgICAgZmllbGRPcmRlcltpbmRleF0gPSAkKGVsZW1lbnQpLmRhdGEoJ3R5cGUnKTtcbiAgICB9KTtcblxuICAgIGlmICh3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdmaWVsZE9yZGVyJywgd2luZG93LkpTT04uc3RyaW5naWZ5KGZpZWxkT3JkZXIpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVvcmRlciB0aGUgY29udHJvbHMgaWYgdGhlIHVzZXIgaGFzIHByZXZpb3VzbHkgb3JkZXJlZCB0aGVtLlxuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheX0gZnJtYkZpZWxkc1xuICAgKiBAcmV0dXJuIHtBcnJheX0gb3JkZXJlZCBmaWVsZHNcbiAgICovXG4gIG9yZGVyRmllbGRzKGZybWJGaWVsZHMpIHtcbiAgICBjb25zdCBvcHRzID0gY29uZmlnLm9wdHM7XG4gICAgbGV0IGZpZWxkT3JkZXIgPSBmYWxzZTtcbiAgICBsZXQgbmV3T3JkZXJGaWVsZHMgPSBbXTtcblxuICAgIGlmICh3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgIGlmIChvcHRzLnNvcnRhYmxlQ29udHJvbHMpIHtcbiAgICAgICAgZmllbGRPcmRlciA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmaWVsZE9yZGVyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZmllbGRPcmRlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZmllbGRPcmRlcikge1xuICAgICAgbGV0IGNvbnRyb2xPcmRlciA9IG9wdHMuY29udHJvbE9yZGVyLmNvbmNhdChmcm1iRmllbGRzLm1hcChmaWVsZCA9PlxuICAgICAgICBmaWVsZC5hdHRycy50eXBlKSk7XG4gICAgICBmaWVsZE9yZGVyID0gdXRpbHMudW5pcXVlKGNvbnRyb2xPcmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkT3JkZXIgPSB3aW5kb3cuSlNPTi5wYXJzZShmaWVsZE9yZGVyKTtcbiAgICAgIGZpZWxkT3JkZXIgPSBPYmplY3Qua2V5cyhmaWVsZE9yZGVyKS5tYXAoZnVuY3Rpb24oaSkge1xuICAgICAgICByZXR1cm4gZmllbGRPcmRlcltpXTtcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgZmllbGRPcmRlci5mb3JFYWNoKChmaWVsZFR5cGUpID0+IHtcbiAgICAgIGxldCBmaWVsZCA9IGZybWJGaWVsZHMuZmlsdGVyKGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgICAgIHJldHVybiBmaWVsZC5hdHRycy50eXBlID09PSBmaWVsZFR5cGU7XG4gICAgICB9KVswXTtcbiAgICAgIG5ld09yZGVyRmllbGRzLnB1c2goZmllbGQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld09yZGVyRmllbGRzLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBmaWVsZHMgYmVpbmcgZWRpdGluZ1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IHN0YWdlXG4gICAqL1xuICBjbG9zZUFsbEVkaXQoKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGNvbnN0IGZpZWxkcyA9ICQoJz4gbGkuZWRpdGluZycsIF90aGlzLmQuc3RhZ2UpO1xuICAgIGNvbnN0IHRvZ2dsZUJ0bnMgPSAkKCcudG9nZ2xlLWZvcm0nLCBfdGhpcy5kLnN0YWdlKTtcbiAgICBjb25zdCBlZGl0UGFuZWxzID0gJCgnLmZybS1ob2xkZXInLCBmaWVsZHMpO1xuXG4gICAgdG9nZ2xlQnRucy5yZW1vdmVDbGFzcygnb3BlbicpO1xuICAgIGZpZWxkcy5yZW1vdmVDbGFzcygnZWRpdGluZycpO1xuICAgICQoJy5wcmV2LWhvbGRlcicsIGZpZWxkcykuc2hvdygpO1xuICAgIGVkaXRQYW5lbHMuaGlkZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGVkaXQgbW9kZSBmb3IgdGhlIGdpdmVuIGZpZWxkXG4gICAqIEBwYXJhbSAge1N0cmluZ30gZmllbGRJZFxuICAgKiBAcGFyYW0gIHtCb29sZWFufSBhbmltYXRlXG4gICAqL1xuICB0b2dnbGVFZGl0KGZpZWxkSWQsIGFuaW1hdGUgPSB0cnVlKSB7XG4gICAgY29uc3QgZmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaWVsZElkKTtcbiAgICBjb25zdCB0b2dnbGVCdG4gPSAkKCcudG9nZ2xlLWZvcm0nLCBmaWVsZCk7XG4gICAgY29uc3QgZWRpdFBhbmVsID0gJCgnLmZybS1ob2xkZXInLCBmaWVsZCk7XG4gICAgZmllbGQuY2xhc3NMaXN0LnRvZ2dsZSgnZWRpdGluZycpO1xuICAgIHRvZ2dsZUJ0bi50b2dnbGVDbGFzcygnb3BlbicpO1xuICAgIGlmIChhbmltYXRlKSB7XG4gICAgICAkKCcucHJldi1ob2xkZXInLCBmaWVsZCkuc2xpZGVUb2dnbGUoMjUwKTtcbiAgICAgIGVkaXRQYW5lbC5zbGlkZVRvZ2dsZSgyNTApO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKCcucHJldi1ob2xkZXInLCBmaWVsZCkudG9nZ2xlKCk7XG4gICAgICBlZGl0UGFuZWwudG9nZ2xlKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUHJldmlldygkKGZpZWxkKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udHJvbHMgZm9sbG93IHNjcm9sbCB0byB0aGUgYm90dG9tIG9mIHRoZSBlZGl0b3JcbiAgICovXG4gIHN0aWNreUNvbnRyb2xzKCkge1xuICAgIGxldCBkID0gdGhpcy5kO1xuICAgIGNvbnN0ICRjYldyYXAgPSAkKGQuY29udHJvbHMpLnBhcmVudCgpO1xuICAgIGNvbnN0ICRzdGFnZVdyYXAgPSAkKGQuc3RhZ2UpLnBhcmVudCgpO1xuICAgIGNvbnN0IGNiV2lkdGggPSAkY2JXcmFwLndpZHRoKCk7XG4gICAgY29uc3QgY2JQb3NpdGlvbiA9IGQuY29udHJvbHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKGV2dCkge1xuICAgICAgbGV0IHNjcm9sbFRvcCA9ICQoZXZ0LnRhcmdldCkuc2Nyb2xsVG9wKCk7XG4gICAgICBjb25zdCBvZmZzZXREZWZhdWx0cyA9IHtcbiAgICAgICAgdG9wOiA1LFxuICAgICAgICBib3R0b206ICdhdXRvJyxcbiAgICAgICAgcmlnaHQ6ICdhdXRvJyxcbiAgICAgICAgbGVmdDogY2JQb3NpdGlvbi5sZWZ0XG4gICAgICB9O1xuXG4gICAgICBsZXQgb2Zmc2V0ID0gT2JqZWN0LmFzc2lnbih7fSwgb2Zmc2V0RGVmYXVsdHMsIGNvbmZpZy5vcHRzLnN0aWNreUNvbnRyb2xzLm9mZnNldCk7XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgPiAkc3RhZ2VXcmFwLm9mZnNldCgpLnRvcCkge1xuICAgICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICB3aWR0aDogY2JXaWR0aFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNiU3R5bGUgPSBPYmplY3QuYXNzaWduKHN0eWxlLCBvZmZzZXQpO1xuXG4gICAgICAgIGxldCBjYk9mZnNldCA9ICRjYldyYXAub2Zmc2V0KCk7XG4gICAgICAgIGxldCBzdGFnZU9mZnNldCA9ICRzdGFnZVdyYXAub2Zmc2V0KCk7XG4gICAgICAgIGxldCBjYkJvdHRvbSA9IGNiT2Zmc2V0LnRvcCArICRjYldyYXAuaGVpZ2h0KCk7XG4gICAgICAgIGxldCBzdGFnZUJvdHRvbSA9IHN0YWdlT2Zmc2V0LnRvcCArICRzdGFnZVdyYXAuaGVpZ2h0KCk7XG5cbiAgICAgICAgaWYgKGNiQm90dG9tID4gc3RhZ2VCb3R0b20gJiYgKGNiT2Zmc2V0LnRvcCAhPT0gc3RhZ2VPZmZzZXQudG9wKSkge1xuICAgICAgICAgICRjYldyYXAuY3NzKHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgdG9wOiAnYXV0bycsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIGxlZnQ6ICdhdXRvJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNiQm90dG9tIDwgc3RhZ2VCb3R0b20gfHwgKGNiQm90dG9tID09PSBzdGFnZUJvdHRvbSAmJiBjYk9mZnNldC50b3AgPiBzY3JvbGxUb3ApKSB7XG4gICAgICAgICAgJGNiV3JhcC5jc3MoY2JTdHlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQuY29udHJvbHMucGFyZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIGRpYWxvZyB3aXRoIHRoZSBmb3JtJ3MgZGF0YVxuICAgKi9cbiAgc2hvd0RhdGEoZSkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3QgZm9ybURhdGEgPSB1dGlscy5lc2NhcGVIdG1sKGRhdGEuZm9ybURhdGEpO1xuICAgIGNvbnN0IGNvZGUgPSBtKCdjb2RlJywgZm9ybURhdGEsIHtcbiAgICAgIGNsYXNzTmFtZTogYGZvcm1EYXRhLSR7Y29uZmlnLm9wdHMuZGF0YVR5cGV9YFxuICAgIH0pO1xuXG4gICAgdGhpcy5kaWFsb2cobSgncHJlJywgY29kZSksIG51bGwsICdkYXRhLWRpYWxvZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGZpZWxkIGZyb20gdGhlIHN0YWdlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gIGZpZWxkSUQgSUQgb2YgdGhlIGZpZWxkIHRvIGJlIHJlbW92ZWRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gZmllbGRSZW1vdmVkIHJldHVybnMgdHJ1ZSBpZiBmaWVsZCBpcyByZW1vdmVkXG4gICAqL1xuICByZW1vdmVGaWVsZChmaWVsZElEKSB7XG4gICAgbGV0IGZpZWxkUmVtb3ZlZCA9IGZhbHNlO1xuICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZC5zdGFnZTtcbiAgICBjb25zdCBmaWVsZHMgPSBmb3JtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Zvcm0tZmllbGQnKTtcblxuICAgIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgICAgY29uc29sZS53YXJuKCdObyBmaWVsZHMgdG8gcmVtb3ZlJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFmaWVsZElEKSB7XG4gICAgICBsZXQgYXZhaWxhYmxlSWRzID0gW10uc2xpY2UuY2FsbChmaWVsZHMpLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmlkO1xuICAgICAgfSk7XG4gICAgICBjb25zb2xlLndhcm4oJ2ZpZWxkSUQgcmVxdWlyZWQgdG8gcmVtb3ZlIHNwZWNpZmljIGZpZWxkcy4gUmVtb3ZpbmcgbGFzdCBmaWVsZCBzaW5jZSBubyBJRCB3YXMgc3VwcGxpZWQuJyk7XG4gICAgICBjb25zb2xlLndhcm4oJ0F2YWlsYWJsZSBJRHM6ICcgKyBhdmFpbGFibGVJZHMuam9pbignLCAnKSk7XG4gICAgICBmaWVsZElEID0gZm9ybS5sYXN0Q2hpbGQuaWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaWVsZElEKTtcbiAgICBjb25zdCAkZmllbGQgPSAkKGZpZWxkKTtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZpZWxkIG5vdCBmb3VuZCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgICRmaWVsZC5zbGlkZVVwKDI1MCwgZnVuY3Rpb24oKSB7XG4gICAgICAkZmllbGQucmVtb3ZlQ2xhc3MoJ2RlbGV0aW5nJyk7XG4gICAgICAkZmllbGQucmVtb3ZlKCk7XG4gICAgICBmaWVsZFJlbW92ZWQgPSB0cnVlO1xuICAgICAgX3RoaXMuc2F2ZSgpO1xuICAgICAgaWYgKCFmb3JtLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBzdGFnZVdyYXAgPSBmb3JtLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHN0YWdlV3JhcC5jbGFzc0xpc3QuYWRkKCdlbXB0eScpO1xuICAgICAgICBzdGFnZVdyYXAuZGF0YXNldC5jb250ZW50ID0gbWkxOG4uY3VycmVudC5nZXRTdGFydGVkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudHMuZmllbGRSZW1vdmVkKTtcbiAgICByZXR1cm4gZmllbGRSZW1vdmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG1hcmt1cCBmb3IgZm9ybSBhY3Rpb24gYnV0dG9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGJ1dHRvbkRhdGFcbiAgICogQHJldHVybiB7T2JqZWN0fSBET00gZWxlbWVudCBmb3IgYWN0aW9uIGJ1dHRvblxuICAgKi9cbiAgcHJvY2Vzc0FjdGlvbkJ1dHRvbnMoYnV0dG9uRGF0YSkge1xuICAgIGxldCB7bGFiZWwsIGV2ZW50cywgLi4uYXR0cnN9ID0gYnV0dG9uRGF0YTtcbiAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICBpZiAoYXR0cnMuaWQpIHtcbiAgICAgICAgbGFiZWwgPSBtaTE4bi5jdXJyZW50W2F0dHJzLmlkXSB8fCB1dGlscy5jYXBpdGFsaXplKGF0dHJzLmlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxhYmVsID0gJyc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhYmVsID0gbWkxOG4uY3VycmVudFtsYWJlbF0gfHwgJyc7XG4gICAgfVxuXG4gICAgaWYgKCFhdHRycy5pZCkge1xuICAgICAgYXR0cnMuaWQgPSBgJHtkYXRhLmZvcm1JRH0tYWN0aW9uLSR7TWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKjEwMDApfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJzLmlkID0gYCR7ZGF0YS5mb3JtSUR9LSR7YXR0cnMuaWR9LWFjdGlvbmA7XG4gICAgfVxuXG4gICAgY29uc3QgYnV0dG9uID0gbSgnYnV0dG9uJywgbGFiZWwsIGF0dHJzKTtcblxuICAgIGlmIChldmVudHMpIHtcbiAgICAgIGZvciAobGV0IGV2ZW50IGluIGV2ZW50cykge1xuICAgICAgICBpZiAoZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBldnQgPT4gZXZlbnRzW2V2ZW50XShldnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBidXR0b247XG4gIH1cblxuICAvKipcbiAgICogQ3Jvc3MgbGluayBzdWJ0eXBlcyBhbmQgZGVmaW5lIG1hcmt1cCBjb25maWdcbiAgICogQHBhcmFtICB7QXJyYXl9IHN1YnR5cGVPcHRzXG4gICAqIEByZXR1cm4ge0FycmF5fSBzdWJ0eXBlc1xuICAgKi9cbiAgcHJvY2Vzc1N1YnR5cGVzKHN1YnR5cGVPcHRzKSB7XG4gICAgbGV0IHN1YnR5cGVzID0ge307XG4gICAgY29uc3Qgc3VidHlwZUZvcm1hdCA9IHN1YnR5cGUgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoc3VidHlwZSksXG4gICAgICAgICAgdmFsdWU6IHN1YnR5cGVcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5zdWJ0eXBlcyA9IHV0aWxzLm1lcmdlKGRlZmF1bHRTdWJ0eXBlcywgc3VidHlwZU9wdHMpO1xuXG4gICAgICBmb3IgKGxldCBzdWJ0eXBlIGluIGNvbmZpZy5zdWJ0eXBlcykge1xuICAgICAgICBpZiAoY29uZmlnLnN1YnR5cGVzLmhhc093blByb3BlcnR5KHN1YnR5cGUpKSB7XG4gICAgICAgICAgc3VidHlwZXNbc3VidHlwZV0gPSBjb25maWcuc3VidHlwZXNbc3VidHlwZV0ubWFwKHN1YnR5cGVGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdWJ0eXBlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzdGFnZSBhbmQgY29udHJvbHMgZG9tIGVsZW1lbnRzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gZm9ybUlEIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGVkaXRvclVJKGZvcm1JRCkge1xuICAgIGxldCBkID0gdGhpcy5kO1xuICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGQuc3RhZ2UgPSBtKCd1bCcsIG51bGwsIHtcbiAgICAgICAgaWQ6IGRhdGEuZm9ybUlELFxuICAgICAgICBjbGFzc05hbWU6ICdmcm1iJ1xuICAgICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgZHJhZ2dhYmxlIGZpZWxkcyBmb3IgZm9ybUJ1aWxkZXJcbiAgICBkLmNvbnRyb2xzID0gbSgndWwnLCBudWxsLCB7XG4gICAgICBpZDogYCR7ZGF0YS5mb3JtSUR9LWNvbnRyb2wtYm94YCxcbiAgICAgIGNsYXNzTmFtZTogJ2ZybWItY29udHJvbCdcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHVzZXIgb3B0aW9ucyBmb3IgYWN0aW9uQnV0dG9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7T2JqZWN0fSBwcm9jZXNzZWRPcHRpb25zXG4gICAqL1xuICBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGxldCB7ZmllbGRzID0gW10sIHRlbXBsYXRlcywgLi4ub3B0c30gPSBvcHRpb25zO1xuICAgIGxldCBhY3Rpb25CdXR0b25zID0gW3tcbiAgICAgIGlkOiAnY2xlYXInLFxuICAgICAgY2xhc3NOYW1lOiAnY2xlYXItYWxsIGJ0biBidG4tZGFuZ2VyJyxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljazogX3RoaXMuY29uZmlybVJlbW92ZUFsbC5iaW5kKF90aGlzKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGxhYmVsOiAndmlld0pTT04nLFxuICAgICAgaWQ6ICdkYXRhJyxcbiAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tZGVmYXVsdCcsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2s6IF90aGlzLnNob3dEYXRhLmJpbmQoX3RoaXMpXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgaWQ6ICdzYXZlJyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1wcmltYXJ5IHNhdmUtdGVtcGxhdGUnLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrOiBldnQgPT4ge1xuICAgICAgICAgIF90aGlzLnNhdmUoKTtcbiAgICAgICAgICBjb25maWcub3B0cy5vblNhdmUoZXZ0LCBfdGhpcy5kYXRhLmZvcm1EYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1dO1xuXG4gICAgbGV0IGRlZmF1bHRGaWVsZHMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2F1dG9jb21wbGV0ZScpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdhdXRvY29tcGxldGUnXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnYnV0dG9uJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnY2hlY2tib3hHcm91cCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdjaGVja2JveC1ncm91cCcsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnZGF0ZUZpZWxkJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGxhYmVsOiBtaTE4bi5nZXQoJ2ZpbGVVcGxvYWQnKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnaGVhZGVyJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ2hlYWRlcicsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnaGlkZGVuJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ2hpZGRlbicsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnbnVtYmVyJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgncGFyYWdyYXBoJyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgncmFkaW9Hcm91cCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICdyYWRpby1ncm91cCcsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgnc2VsZWN0JyksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6IG1pMThuLmdldCgndGV4dCcpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogbWkxOG4uZ2V0KCd0ZXh0QXJlYScpLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0YXJlYSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG5cbiAgICBvcHRzLmZpZWxkcyA9IGZpZWxkcy5jb25jYXQoZGVmYXVsdEZpZWxkcyk7XG4gICAgY29uZmlnLm9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB7YWN0aW9uQnV0dG9ucywgdGVtcGxhdGVzLCBmaWVsZHN9LCBvcHRzKTtcbiAgICBsZXQgdXNlclRlbXBsYXRlcyA9IE9iamVjdC5rZXlzKGNvbmZpZy5vcHRzLnRlbXBsYXRlcykubWFwKGtleSA9PiB7XG4gICAgICByZXR1cm4gW2tleSwgY29uZmlnLm9wdHMudGVtcGxhdGVzW2tleV1dO1xuICAgIH0pO1xuICAgIHV0aWxzLnRlbXBsYXRlcyA9IHV0aWxzLnRlbXBsYXRlcy5jb25jYXQodXNlclRlbXBsYXRlcyk7XG5cbiAgICByZXR1cm4gY29uZmlnLm9wdHM7XG4gIH1cblxuXG4gIC8vIGVuZCBjbGFzc1xufVxuXG4vLyBleHBvcnQgZGVmYXVsdCBIZWxwZXJzO1xuIiwiLyoqXG4gKiBQb2x5ZmlsbHMgZm9yIG9sZGVyIGJyb3dzZXJzIGFuZCBhZGRlZCBmdW5jdGlvbmFsaXR5XG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBwb2x5ZmlsbHMoKSB7XG4gIC8vIEVsZW1lbnQucmVtb3ZlKCkgcG9seWZpbGxcbiAgaWYgKCEoJ3JlbW92ZScgaW4gRWxlbWVudC5wcm90b3R5cGUpKSB7XG4gICAgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gRXZlbnQgcG9seWZpbGxcbiAgaWYgKHR5cGVvZiBFdmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHdpbmRvdy5FdmVudCA9IGZ1bmN0aW9uKGV2dCkge1xuICAgICAgICBsZXQgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgICAgZXZlbnQuaW5pdEV2ZW50KGV2dCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgfVxuXG4gIC8vIE9iamVjdC5hc3NpZ24gcG9seWZpbGxcbiAgaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9ICdmdW5jdGlvbicpIHtcbiAgICBPYmplY3QuYXNzaWduID0gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAndXNlIHN0cmljdCc7XG4gICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldCA9IE9iamVjdCh0YXJnZXQpO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbGV0IHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAobGV0IGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gIH1cblxuXG4gIC8vIFJlZmVyZW5jZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS40LjQuMThcbiAgaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkge1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgIGxldCBULCBrO1xuICAgICAgaWYgKHRoaXMgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBPID0gT2JqZWN0KHRoaXMpO1xuICAgICAgbGV0IGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIFQgPSBhcmd1bWVudHNbMV07XG4gICAgICB9XG4gICAgICBrID0gMDtcbiAgICAgIHdoaWxlIChrIDwgbGVuKSB7XG4gICAgICAgIGxldCBrVmFsdWU7XG4gICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgIGNhbGxiYWNrLmNhbGwoVCwga1ZhbHVlLCBrLCBPKTtcbiAgICAgICAgfVxuICAgICAgICBrKys7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwb2x5ZmlsbHMoKTtcbiIsImltcG9ydCB7ZGVmYXVsdFN1YnR5cGVzLCBmaWx0ZXJ9IGZyb20gJy4vZG9tJztcblxuLyoqXG4gKiBDcm9zcyBmaWxlIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIGFycmF5cyxcbiAqIHNvcnRpbmcgYW5kIG90aGVyIGZ1biBzdHVmZlxuICogQHJldHVybiB7T2JqZWN0fSB1dGlsc1xuICovXG4vLyBmdW5jdGlvbiB1dGlscygpIHtcbiAgY29uc3QgdXRpbHMgPSB7fTtcbiAgd2luZG93LmZiTG9hZGVkID0ge1xuICAgIGpzOiBbXSxcbiAgICBjc3M6IFtdXG4gIH07XG4gIHdpbmRvdy5mYkVkaXRvcnMgPSB7XG4gICAgcXVpbGw6IHt9LFxuICAgIHRpbnltY2U6IHt9XG4gIH07XG5cbiAgLy8gY2xlYW5lciBzeW50YXggZm9yIHRlc3RpbmcgaW5kZXhPZiBlbGVtZW50XG4gIHV0aWxzLmluQXJyYXkgPSBmdW5jdGlvbihuZWVkbGUsIGhheXN0YWNrKSB7XG4gICAgcmV0dXJuIGhheXN0YWNrLmluZGV4T2YobmVlZGxlKSAhPT0gLTE7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhdHRycyB7YXR0ck5hbWU6IGF0dHJWYWx1ZX1cbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICBPYmplY3QgdHJpbW1lZCBvZiBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICovXG4gIHV0aWxzLnRyaW1PYmogPSBmdW5jdGlvbihhdHRycykge1xuICAgIGxldCB4bWxSZW1vdmUgPSBbXG4gICAgICBudWxsLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgJycsXG4gICAgICBmYWxzZSxcbiAgICAgICdmYWxzZSdcbiAgICBdO1xuICAgIGZvciAobGV0IGF0dHIgaW4gYXR0cnMpIHtcbiAgICAgIGlmICh1dGlscy5pbkFycmF5KGF0dHJzW2F0dHJdLCB4bWxSZW1vdmUpKSB7XG4gICAgICAgIGRlbGV0ZSBhdHRyc1thdHRyXTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhdHRyc1thdHRyXSkpIHtcbiAgICAgICAgaWYgKCFhdHRyc1thdHRyXS5sZW5ndGgpIHtcbiAgICAgICAgICBkZWxldGUgYXR0cnNbYXR0cl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRlc3QgaWYgYXR0cmlidXRlIGlzIGEgdmFsaWQgSFRNTCBhdHRyaWJ1dGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBhdHRyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICB1dGlscy52YWxpZEF0dHIgPSBmdW5jdGlvbihhdHRyKSB7XG4gICAgbGV0IGludmFsaWQgPSBbXG4gICAgICAndmFsdWVzJyxcbiAgICAgICdlbmFibGVPdGhlcicsXG4gICAgICAnb3RoZXInLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgIC8vICdzdHlsZScsXG4gICAgICAnc3VidHlwZSdcbiAgICBdO1xuICAgIHJldHVybiAhdXRpbHMuaW5BcnJheShhdHRyLCBpbnZhbGlkKTtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydCBhbiBhdHRycyBvYmplY3QgaW50byBhIHN0cmluZ1xuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGF0dHJzIG9iamVjdCBvZiBhdHRyaWJ1dGVzIGZvciBtYXJrdXBcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdXRpbHMuYXR0clN0cmluZyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgbGV0IGF0dHJpYnV0ZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGF0dHIgaW4gYXR0cnMpIHtcbiAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShhdHRyKSAmJiB1dGlscy52YWxpZEF0dHIoYXR0cikpIHtcbiAgICAgICAgYXR0ciA9IHV0aWxzLnNhZmVBdHRyKGF0dHIsIGF0dHJzW2F0dHJdKTtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKGF0dHIubmFtZSArIGF0dHIudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXR0cmlidXRlcy5qb2luKCcgJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYXR0cmlidXRlcyB0byBtYXJrdXAgc2FmZSBzdHJpbmdzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbmFtZSAgYXR0cmlidXRlIG5hbWVcbiAgICogQHBhcmFtICB7U3RyaW5nfSB2YWx1ZSBhdHRyaWJ1dGUgdmFsdWVcbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICB7YXR0ck5hbWU6IGF0dHJWYWx1ZX1cbiAgICovXG4gIHV0aWxzLnNhZmVBdHRyID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gdXRpbHMuc2FmZUF0dHJOYW1lKG5hbWUpO1xuICAgIGxldCB2YWxTdHJpbmc7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWxTdHJpbmcgPSB1dGlscy5lc2NhcGVBdHRyKHZhbHVlLmpvaW4oJyAnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHZhbFN0cmluZyA9IHV0aWxzLmVzY2FwZUF0dHIodmFsdWUucmVwbGFjZSgnLCcsICcgJykudHJpbSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YWx1ZSA9IHZhbHVlID8gYD1cIiR7dmFsU3RyaW5nfVwiYCA6ICcnO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWVcbiAgICB9O1xuICB9O1xuXG4gIHV0aWxzLnNhZmVBdHRyTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBsZXQgc2FmZUF0dHIgPSB7XG4gICAgICBjbGFzc05hbWU6ICdjbGFzcydcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNhZmVBdHRyW25hbWVdIHx8IHV0aWxzLmh5cGhlbkNhc2UobmFtZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgc3RyaW5ncyBpbnRvIGxvd2VyY2FzZS1oeXBoZW5cbiAgICpcbiAgICogQHBhcmFtICB7U3RyaW5nfSBzdHJcbiAgICogQHJldHVybiB7U3RyaW5nfVxuICAgKi9cbiAgdXRpbHMuaHlwaGVuQ2FzZSA9IChzdHIpID0+IHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvW15cXHdcXHNcXC1dL2dpLCAnJyk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLyhbQS1aXSkvZywgZnVuY3Rpb24oJDEpIHtcbiAgICAgIHJldHVybiAnLScgKyAkMS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHMvZywgJy0nKS5yZXBsYWNlKC9eLSsvZywgJycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBjb252ZXJ0IGEgaHlwaGVuYXRlZCBzdHJpbmcgdG8gY2FtZWxDYXNlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gc3RyXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICovXG4gIHV0aWxzLmNhbWVsQ2FzZSA9IHN0ciA9PiBzdHIucmVwbGFjZSgvLShbYS16XSkvZywgKG0sIHcpID0+XG4gICAgdy50b1VwcGVyQ2FzZSgpKTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGNvbnRlbnQgdHlwZVxuICAgKiBAcGFyYW0gIHtOb2RlIHwgU3RyaW5nIHwgQXJyYXkgfCBPYmplY3R9IGNvbnRlbnRcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSBmb3IgbWFwcGluZ1xuICAgKi9cbiAgdXRpbHMuY29udGVudFR5cGUgPSBjb250ZW50ID0+IHtcbiAgICBsZXQgdHlwZSA9IHR5cGVvZiBjb250ZW50O1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgTm9kZSB8fCBjb250ZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHR5cGUgPSAnbm9kZSc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKSB7XG4gICAgICB0eXBlID0gJ2FycmF5JztcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfTtcblxuICAvKipcbiAgICogQmluZCBldmVudHMgdG8gYW4gZWxlbWVudFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGVsZW1lbnQgRE9NIGVsZW1lbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBldmVudHMgIG9iamVjdCBmdWxsIG9mIGV2ZW50cyBlZy4ge2NsaWNrOiBldnQgPT4gY2FsbGJhY2t9XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICB1dGlscy5iaW5kRXZlbnRzID0gKGVsZW1lbnQsIGV2ZW50cykgPT4ge1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIGZvciAobGV0IGV2ZW50IGluIGV2ZW50cykge1xuICAgICAgICBpZiAoZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZXZ0ID0+IGV2ZW50c1tldmVudF0oZXZ0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgbmFtZSBhdHRyaWJ1dGVcbiAqIEBwYXJhbSAge09iamVjdH0gZmllbGRcbiAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgbmFtZVxuICovXG4gIHV0aWxzLm5hbWVBdHRyID0gZnVuY3Rpb24oZmllbGQpIHtcbiAgICBsZXQgZXBvY2ggPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBsZXQgcHJlZml4ID0gZmllbGQudHlwZSB8fCB1dGlscy5oeXBoZW5DYXNlKGZpZWxkLmxhYmVsKTtcbiAgICByZXR1cm4gcHJlZml4ICsgJy0nICsgZXBvY2g7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG1hcmt1cCB3cmFwcGVyIHdoZXJlIG5lZWRlZFxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgICB0YWdcbiAgICogQHBhcmFtICB7U3RyaW5nfEFycmF5fE9iamVjdH0gY29udGVudCB3ZSB3cmFwIHRoaXNcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgICAgICAgYXR0cnNcbiAgICogQHJldHVybiB7T2JqZWN0fSBET00gRWxlbWVudFxuICAgKi9cbiAgdXRpbHMubWFya3VwID0gZnVuY3Rpb24odGFnLCBjb250ZW50ID0gJycsIGF0dHJpYnV0ZXMgPSB7fSkge1xuICAgIGxldCBjb250ZW50VHlwZSA9IHV0aWxzLmNvbnRlbnRUeXBlKGNvbnRlbnQpO1xuICAgIGxldCB7ZXZlbnRzLCAuLi5hdHRyc30gPSBhdHRyaWJ1dGVzO1xuICAgIGNvbnN0IGZpZWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuXG4gICAgY29uc3QgYXBwZW5kQ29udGVudCA9IHtcbiAgICAgIHN0cmluZzogKGNvbnRlbnQpID0+IHtcbiAgICAgICAgZmllbGQuaW5uZXJIVE1MICs9IGNvbnRlbnQ7XG4gICAgICB9LFxuICAgICAgb2JqZWN0OiAoY29uZmlnKSA9PiB7XG4gICAgICAgIGxldCB7dGFnLCBjb250ZW50LCAuLi5kYXRhfSA9IGNvbmZpZztcbiAgICAgICAgcmV0dXJuIGZpZWxkLmFwcGVuZENoaWxkKHV0aWxzLm1hcmt1cCh0YWcsIGNvbnRlbnQsIGRhdGEpKTtcbiAgICAgIH0sXG4gICAgICBub2RlOiAoY29udGVudCkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGQuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgICB9LFxuICAgICAgYXJyYXk6IChjb250ZW50KSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnRlbnRUeXBlID0gdXRpbHMuY29udGVudFR5cGUoY29udGVudFtpXSk7XG4gICAgICAgICAgYXBwZW5kQ29udGVudFtjb250ZW50VHlwZV0oY29udGVudFtpXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbjogY29udGVudCA9PiB7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50KCk7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gdXRpbHMuY29udGVudFR5cGUoY29udGVudCk7XG4gICAgICAgIGFwcGVuZENvbnRlbnRbY29udGVudFR5cGVdKGNvbnRlbnQpO1xuICAgICAgfSxcbiAgICAgIHVuZGVmaW5lZDogKCkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKHRhZywgY29udGVudCwgYXR0cmlidXRlcyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBmb3IgKGxldCBhdHRyIGluIGF0dHJzKSB7XG4gICAgICBpZiAoYXR0cnMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgbGV0IG5hbWUgPSB1dGlscy5zYWZlQXR0ck5hbWUoYXR0cik7XG4gICAgICAgIGZpZWxkLnNldEF0dHJpYnV0ZShuYW1lLCBhdHRyc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIGFwcGVuZENvbnRlbnRbY29udGVudFR5cGVdLmNhbGwodGhpcywgY29udGVudCk7XG4gICAgfVxuXG4gICAgdXRpbHMuYmluZEV2ZW50cyhmaWVsZCwgZXZlbnRzKTtcblxuICAgIHJldHVybiBmaWVsZDtcbiAgfTtcbiAgY29uc3QgbSA9IHV0aWxzLm1hcmt1cDtcblxuICAvKipcbiAgICogQ29udmVydCBodG1sIGVsZW1lbnQgYXR0cmlidXRlcyB0byBrZXkvdmFsdWUgb2JqZWN0XG4gICAqIEBwYXJhbSAge09iamVjdH0gZWxlbSBET00gZWxlbWVudFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGV4OiB7YXR0ck5hbWU6IGF0dHJWYWx1ZX1cbiAgICovXG4gIHV0aWxzLnBhcnNlQXR0cnMgPSBmdW5jdGlvbihlbGVtKSB7XG4gICAgbGV0IGF0dHJzID0gZWxlbS5hdHRyaWJ1dGVzO1xuICAgIGxldCBkYXRhID0ge307XG4gICAgdXRpbHMuZm9yRWFjaChhdHRycywgYXR0ciA9PiB7XG4gICAgICBsZXQgYXR0clZhbCA9IGF0dHJzW2F0dHJdLnZhbHVlO1xuICAgICAgaWYgKGF0dHJWYWwubWF0Y2goL2ZhbHNlfHRydWUvZykpIHtcbiAgICAgICAgYXR0clZhbCA9IChhdHRyVmFsID09PSAndHJ1ZScpO1xuICAgICAgfSBlbHNlIGlmIChhdHRyVmFsLm1hdGNoKC91bmRlZmluZWQvZykpIHtcbiAgICAgICAgYXR0clZhbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJWYWwpIHtcbiAgICAgICAgZGF0YVthdHRyc1thdHRyXS5uYW1lXSA9IGF0dHJWYWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydCBmaWVsZCBvcHRpb25zIHRvIG9wdGlvbkRhdGFcbiAgICogQHBhcmFtICB7Tm9kZUxpc3R9IG9wdGlvbnMgIERPTSBlbGVtZW50c1xuICAgKiBAcmV0dXJuIHtBcnJheX0gb3B0aW9uRGF0YSBhcnJheVxuICAgKi9cbiAgdXRpbHMucGFyc2VPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGxldCBvcHRpb25EYXRhID0ge307XG4gICAgbGV0IGRhdGEgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9uRGF0YSA9IHV0aWxzLnBhcnNlQXR0cnMob3B0aW9uc1tpXSk7XG4gICAgICBvcHRpb25EYXRhLmxhYmVsID0gb3B0aW9uc1tpXS50ZXh0Q29udGVudDtcbiAgICAgIGRhdGEucHVzaChvcHRpb25EYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgWE1MIGZvcm1EYXRhXG4gICAqIEBwYXJhbSAge1N0cmluZ30geG1sU3RyaW5nXG4gICAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICAgIGZvcm1EYXRhIGFycmF5XG4gICAqL1xuICB1dGlscy5wYXJzZVhNTCA9IGZ1bmN0aW9uKHhtbFN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG4gICAgbGV0IHhtbCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeG1sU3RyaW5nLCAndGV4dC94bWwnKTtcbiAgICBsZXQgZm9ybURhdGEgPSBbXTtcblxuICAgIGlmICh4bWwpIHtcbiAgICAgIGxldCBmaWVsZHMgPSB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZpZWxkJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZmllbGREYXRhID0gdXRpbHMucGFyc2VBdHRycyhmaWVsZHNbaV0pO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZmllbGRzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvcHRpb24nKTtcblxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIGZpZWxkRGF0YS52YWx1ZXMgPSB1dGlscy5wYXJzZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtRGF0YS5wdXNoKGZpZWxkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBlc2NhcGVkIEhUTUwgaW50byB1c2FibGUgSFRNTFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGh0bWwgZXNjYXBlZCBIVE1MXG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgICBwYXJzZWQgSFRNTFxuICAgKi9cbiAgdXRpbHMucGFyc2VkSHRtbCA9IGZ1bmN0aW9uKGh0bWwpIHtcbiAgICBsZXQgZXNjYXBlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgZXNjYXBlRWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiBlc2NhcGVFbGVtZW50LnRleHRDb250ZW50O1xuICB9O1xuXG4gIC8qKlxuICAgKiBFc2NhcGUgbWFya3VwIHNvIGl0IGNhbiBiZSBkaXNwbGF5ZWQgcmF0aGVyIHRoYW4gcmVuZGVyZWRcbiAgICogQHBhcmFtICB7U3RyaW5nfSBodG1sIG1hcmt1cFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgZXNjYXBlZCBodG1sXG4gICAqL1xuICB1dGlscy5lc2NhcGVIdG1sID0gZnVuY3Rpb24oaHRtbCkge1xuICAgIGxldCBlc2NhcGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICBlc2NhcGVFbGVtZW50LnRleHRDb250ZW50ID0gaHRtbDtcbiAgICByZXR1cm4gZXNjYXBlRWxlbWVudC5pbm5lckhUTUw7XG4gIH07XG5cbiAgLy8gRXNjYXBlIGFuIGF0dHJpYnV0ZVxuICB1dGlscy5lc2NhcGVBdHRyID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgbGV0IG1hdGNoID0ge1xuICAgICAgJ1wiJzogJyZxdW90OycsXG4gICAgICAnJic6ICcmYW1wOycsXG4gICAgICAnPCc6ICcmbHQ7JyxcbiAgICAgICc+JzogJyZndDsnXG4gICAgfTtcblxuICAgIGNvbnN0IHJlcGxhY2VUYWcgPSB0YWcgPT4gbWF0Y2hbdGFnXSB8fCB0YWc7XG5cbiAgICByZXR1cm4gKHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKSA/IHN0ci5yZXBsYWNlKC9bXCImPD5dL2csIHJlcGxhY2VUYWcpIDogc3RyO1xuICB9O1xuXG4gIC8vIEVzY2FwZSBhdHRyaWJ1dGVzXG4gIHV0aWxzLmVzY2FwZUF0dHJzID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBmb3IgKGxldCBhdHRyIGluIGF0dHJzKSB7XG4gICAgICBpZiAoYXR0cnMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgYXR0cnNbYXR0cl0gPSB1dGlscy5lc2NhcGVBdHRyKGF0dHJzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG4gIH07XG5cbiAgLy8gZm9yRWFjaCB0aGF0IGNhbiBiZSB1c2VkIG9uIG5vZGVMaXN0XG4gIHV0aWxzLmZvckVhY2ggPSBmdW5jdGlvbihhcnJheSwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2suY2FsbChzY29wZSwgaSwgYXJyYXlbaV0pOyAvLyBwYXNzZXMgYmFjayBzdHVmZiB3ZSBuZWVkXG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgZHVwbGljYXRlcyBmcm9tIGFuIGFycmF5IG9mIGVsZW1lbnRzXG4gICAqIEBwYXJhbSAge0FycmF5fSBhcnJheSAgYXJyYXkgd2l0aCBwb3NzaWJsZSBkdXBsaWNhdGVzXG4gICAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgYXJyYXkgd2l0aCBvbmx5IHVuaXF1ZSB2YWx1ZXNcbiAgICovXG4gIHV0aWxzLnVuaXF1ZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcigoZWxlbSwgcG9zLCBhcnIpID0+IHtcbiAgICAgIHJldHVybiBhcnIuaW5kZXhPZihlbGVtKSA9PT0gcG9zO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgdmFsdWUgZnJvbSBhbiBhcnJheVxuICAgKiBAcGFyYW0gIHtBcnJheX0gYXJyXG4gICAqIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICAgKi9cbiAgdXRpbHMucmVtb3ZlID0gKHZhbCwgYXJyKSA9PiB7XG4gICAgbGV0IGluZGV4ID0gYXJyLmluZGV4T2YodmFsKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9O1xuXG5cbiAgdXRpbHMubWFrZUxhYmVsID0gZmllbGREYXRhID0+IHtcbiAgICBsZXQge2xhYmVsID0gJycsIGRlc2NyaXB0aW9uID0gJycsIC4uLmF0dHJzfSA9IGZpZWxkRGF0YTtcbiAgICBsZXQgbGFiZWxUZXh0ID0gdXRpbHMucGFyc2VkSHRtbChsYWJlbCk7XG4gICAgbGV0IGxhYmVsQ29udGVudHMgPSBbbGFiZWxUZXh0XTtcblxuICAgIGlmIChhdHRycy5yZXF1aXJlZCkge1xuICAgICAgbGFiZWxDb250ZW50cy5wdXNoKG0oJ3NwYW4nLCAnIConLCB7Y2xhc3NOYW1lOiAnZmItcmVxdWlyZWQnfSkpO1xuICAgIH1cblxuICAgIGlmIChhdHRycy50eXBlICE9PSAnaGlkZGVuJykge1xuICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGxhYmVsQ29udGVudHMucHVzaChtKCdzcGFuJywgJz8nLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAndG9vbHRpcC1lbGVtZW50JyxcbiAgICAgICAgICB0b29sdGlwOiBkZXNjcmlwdGlvblxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxhYmVsQXR0cnMgPSB7XG4gICAgICBjbGFzc05hbWU6IGBmYi0ke2F0dHJzLnR5cGV9LWxhYmVsYFxuICAgIH07XG5cbiAgICBpZiAoYXR0cnMuaWQpIHtcbiAgICAgIGxhYmVsQXR0cnMuZm9yID0gYXR0cnMuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG0oJ2xhYmVsJywgbGFiZWxDb250ZW50cywgbGFiZWxBdHRycyk7XG4gIH07XG5cbiAgdXRpbHMudGVtcGxhdGVNYXAgPSB0eXBlID0+IHtcbiAgICBsZXQgdGVtcGxhdGU7XG4gICAgbGV0IHRlbXBsYXRlcyA9IHV0aWxzLnRlbXBsYXRlcztcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGVtcGxhdGVzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgIGlmKHV0aWxzLmluQXJyYXkodHlwZSwga2V5KSkge1xuICAgICAgICAgIHRlbXBsYXRlID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0ga2V5KSB7XG4gICAgICAgIHRlbXBsYXRlID0gdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICB1dGlscy5hdXRvY29tcGxldGVUZW1wbGF0ZSA9IGZpZWxkRGF0YSA9PiB7XG4gICAgbGV0IHt2YWx1ZXMsIHR5cGUsIC4uLmRhdGF9ID0gZmllbGREYXRhO1xuICAgIGNvbnN0IGtleWJvYXJkTmF2ID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBlLnRhcmdldC5uZXh0U2libGluZy5uZXh0U2libGluZztcbiAgICAgIGxldCBhY3RpdmVPcHRpb24gPSBsaXN0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FjdGl2ZS1vcHRpb24nKVswXTtcbiAgICAgIGNvbnN0IGtleUNvZGVNYXBWYWxzID0gW1xuICAgICAgICAvLyB1cFxuICAgICAgICBbMzgsICgpID0+IHtcbiAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uLnByZXZpb3VzU2libGluZykge1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlLW9wdGlvbicpO1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24gPSBhY3RpdmVPcHRpb24ucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlLW9wdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfV0sXG4gICAgICAgIC8vIGRvd25cbiAgICAgICAgWzQwLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbi5uZXh0U2libGluZykge1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlLW9wdGlvbicpO1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24gPSBhY3RpdmVPcHRpb24ubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgIGFjdGl2ZU9wdGlvbi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUtb3B0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbiA9IGxpc3QuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUtb3B0aW9uJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XSxcbiAgICAgICAgWzEzLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSBhY3RpdmVPcHRpb24uaW5uZXJIVE1MO1xuICAgICAgICAgICAgaWYgKGxpc3Quc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgIGxpc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsaXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XVxuICAgICAgXTtcbiAgICAgIGxldCBrZXlDb2RlTWFwID0gbmV3IE1hcChrZXlDb2RlTWFwVmFscyk7XG5cbiAgICAgIGxldCBkaXJlY3Rpb24gPSBrZXlDb2RlTWFwLmdldChlLmtleUNvZGUpO1xuICAgICAgaWYoIWRpcmVjdGlvbikge1xuICAgICAgICBkaXJlY3Rpb24gPSAoKSA9PiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpcmVjdGlvbigpO1xuICAgIH07XG4gICAgY29uc3QgZmF1eEV2ZW50cyA9IHtcbiAgICAgIGZvY3VzOiBldnQgPT4ge1xuICAgICAgICBsZXQgbGlzdCA9IGV2dC50YXJnZXQubmV4dFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICAgIGV2dC50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWJvYXJkTmF2KTtcbiAgICAgICAgbGlzdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgbGlzdC5zdHlsZS53aWR0aCA9IGxpc3QucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XG4gICAgICB9LFxuICAgICAgYmx1cjogZXZ0ID0+IHtcbiAgICAgICAgZXZ0LnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5Ym9hcmROYXYpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBldnQudGFyZ2V0Lm5leHRTaWJsaW5nLm5leHRTaWJsaW5nLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgICB9LFxuICAgICAgaW5wdXQ6IChldnQpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IGV2dC50YXJnZXQubmV4dFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICAgIGZpbHRlcihsaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJyksIGV2dC50YXJnZXQudmFsdWUpO1xuICAgICAgICBpZiAoIWV2dC50YXJnZXQudmFsdWUpIHtcbiAgICAgICAgICBsaXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlzdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgbGV0IGZhdXhBdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEsXG4gICAgICB7XG4gICAgICAgIGlkOiBgJHtkYXRhLmlkfS1pbnB1dGAsXG4gICAgICAgIGV2ZW50czogZmF1eEV2ZW50c1xuICAgICAgfSk7XG4gICAgbGV0IGhpZGRlbkF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSwge3R5cGU6ICdoaWRkZW4nfSk7XG4gICAgZGVsZXRlIGZhdXhBdHRycy5uYW1lO1xuICAgIGNvbnN0IGZpZWxkID0gW1xuICAgICAgbSgnaW5wdXQnLCBudWxsLCBmYXV4QXR0cnMpLFxuICAgICAgbSgnaW5wdXQnLCBudWxsLCBoaWRkZW5BdHRycylcbiAgICBdO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHZhbHVlcy5tYXAob3B0aW9uRGF0YSA9PiB7XG4gICAgICBsZXQgbGFiZWwgPSBvcHRpb25EYXRhLmxhYmVsO1xuICAgICAgbGV0IGNvbmZpZyA9IHtcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2s6IGV2dCA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gZXZ0LnRhcmdldC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBsaXN0LnByZXZpb3VzU2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IG9wdGlvbkRhdGEubGFiZWw7XG4gICAgICAgICAgICBmaWVsZC5wcmV2aW91c1NpYmxpbmcudmFsdWUgPSBvcHRpb25EYXRhLnZhbHVlO1xuICAgICAgICAgICAgbGlzdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IG9wdGlvbkRhdGEudmFsdWVcbiAgICAgIH07XG4gICAgICByZXR1cm4gbSgnbGknLCBsYWJlbCwgY29uZmlnKTtcbiAgICB9KTtcblxuICAgIGZpZWxkLnB1c2gobSgndWwnLCBvcHRpb25zLFxuICAgICAge2lkOiBgJHtkYXRhLmlkfS1saXN0YCwgY2xhc3NOYW1lOiBgZmItJHt0eXBlfS1saXN0YH0pKTtcblxuICAgIGNvbnN0IG9uUmVuZGVyID0gKGV2dCkgPT4ge1xuXG4gICAgfTtcblxuICAgIHJldHVybiB7ZmllbGQsIG9uUmVuZGVyfTtcbiAgfTtcblxuICAvKipcbiAgICogR2VuZXJhdGUgRE9NIGVsZW1lbnRzIGZvciBzZWxlY3QsIGNoZWNrYm94LWdyb3VwIGFuZCByYWRpby1ncm91cC5cbiAgICogQHBhcmFtICB7T2JqZWN0fSBmaWVsZERhdGFcbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgICAgRE9NIGVsZW1lbnRzXG4gICAqL1xuICB1dGlscy5zZWxlY3RUZW1wbGF0ZSA9IChmaWVsZERhdGEsIGlzUHJldmlldykgPT4ge1xuICAgIGxldCBvcHRpb25zID0gW107XG4gICAgbGV0IHt2YWx1ZXMsIHR5cGUsIGlubGluZSwgb3RoZXIsIHRvZ2dsZSwgLi4uZGF0YX0gPSBmaWVsZERhdGE7XG4gICAgbGV0IGF0dHJzID0gdXRpbHMucHJvY2Vzc0ZpZWxkRGF0YUF0dHJzKGRhdGEsIGlzUHJldmlldyk7XG4gICAgbGV0IG9wdGlvblR5cGUgPSB0eXBlLnJlcGxhY2UoJy1ncm91cCcsICcnKTtcbiAgICBsZXQgaXNTZWxlY3QgPSB0eXBlID09PSAnc2VsZWN0JztcblxuICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgIGlmIChhdHRycy5wbGFjZWhvbGRlciAmJiBpc1NlbGVjdCkge1xuICAgICAgICBvcHRpb25zLnB1c2gobSgnb3B0aW9uJywgYXR0cnMucGxhY2Vob2xkZXIsIHtcbiAgICAgICAgICBkaXNhYmxlZDogbnVsbCxcbiAgICAgICAgICBzZWxlY3RlZDogbnVsbFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCB7bGFiZWwgPSAnJywgLi4ub3B0aW9uQXR0cnN9ID0gdmFsdWVzW2ldO1xuXG4gICAgICAgIG9wdGlvbkF0dHJzLmlkID0gYCR7YXR0cnMuaWR9LSR7aX1gO1xuICAgICAgICBpZiAoIW9wdGlvbkF0dHJzLnNlbGVjdGVkIHx8IGF0dHJzLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbkF0dHJzLnNlbGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzU2VsZWN0KSB7XG4gICAgICAgICAgbGV0IG8gPSBtKCdvcHRpb24nLCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsYWJlbCksIG9wdGlvbkF0dHJzKTtcbiAgICAgICAgICBvcHRpb25zLnB1c2gobyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IG9wdGlvblR5cGU7XG4gICAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gYGZiLSR7b3B0aW9uVHlwZX0taW5saW5lYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3B0aW9uQXR0cnMudHlwZSA9IG9wdGlvblR5cGU7XG4gICAgICAgICAgaWYgKG9wdGlvbkF0dHJzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICBvcHRpb25BdHRycy5jaGVja2VkID0gJ2NoZWNrZWQnO1xuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbkF0dHJzLnNlbGVjdGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgaW5wdXQgPSBtKCdpbnB1dCcsIG51bGwsIE9iamVjdC5hc3NpZ24oe30sIGF0dHJzLCBvcHRpb25BdHRycykpO1xuICAgICAgICAgIGxldCBsYWJlbEF0dHJzID0ge2Zvcjogb3B0aW9uQXR0cnMuaWR9O1xuICAgICAgICAgIGxldCBsYWJlbENvbnRlbnQgPSBbaW5wdXQsIGxhYmVsXTtcbiAgICAgICAgICBpZiAodG9nZ2xlKSB7XG4gICAgICAgICAgICBsZXQga2NUb2dnbGUgPSBtKCdzcGFuJyk7XG4gICAgICAgICAgICBsYWJlbENvbnRlbnQgPSBbaW5wdXQsIGtjVG9nZ2xlLCBsYWJlbF07XG4gICAgICAgICAgICBsYWJlbEF0dHJzLmNsYXNzTmFtZSA9ICdrYy10b2dnbGUnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBpbnB1dExhYmVsID0gbSgnbGFiZWwnLCBsYWJlbENvbnRlbnQsIGxhYmVsQXR0cnMpO1xuICAgICAgICAgIGxldCB3cmFwcGVyID0gbSgnZGl2JywgaW5wdXRMYWJlbCwge2NsYXNzTmFtZTogd3JhcHBlckNsYXNzfSk7XG4gICAgICAgICAgb3B0aW9ucy5wdXNoKHdyYXBwZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNTZWxlY3QgJiYgb3RoZXIpIHtcbiAgICAgICAgbGV0IG90aGVyT3B0aW9uQXR0cnMgPSB7XG4gICAgICAgICAgaWQ6IGAke2F0dHJzLmlkfS1vdGhlcmAsXG4gICAgICAgICAgY2xhc3NOYW1lOiBgJHthdHRycy5jbGFzc05hbWV9IG90aGVyLW9wdGlvbmAsXG4gICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICBjbGljazogKCkgPT4gdXRpbHMub3RoZXJPcHRpb25DQihvdGhlck9wdGlvbkF0dHJzLmlkKVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gbGV0IGxhYmVsID0gbWkxOG4uY3VycmVudC5vdGhlcjtcbiAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IG9wdGlvblR5cGU7XG4gICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICB3cmFwcGVyQ2xhc3MgKz0gJy1pbmxpbmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9wdGlvbkF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSwgb3RoZXJPcHRpb25BdHRycyk7XG4gICAgICAgIG9wdGlvbkF0dHJzLnR5cGUgPSBvcHRpb25UeXBlO1xuXG4gICAgICAgIGxldCBvdGhlclZhbEF0dHJzID0ge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICAgICAgaWQ6IGAke290aGVyT3B0aW9uQXR0cnMuaWR9LXZhbHVlYCxcbiAgICAgICAgICBjbGFzc05hbWU6ICdvdGhlci12YWwnXG4gICAgICAgIH07XG4gICAgICAgIGxldCBvdGhlcklucHV0cyA9IFtcbiAgICAgICAgICBtKCdpbnB1dCcsIG51bGwsIG9wdGlvbkF0dHJzKSxcbiAgICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnT3RoZXInKSxcbiAgICAgICAgICBtKCdpbnB1dCcsIG51bGwsIG90aGVyVmFsQXR0cnMpXG4gICAgICAgIF07XG4gICAgICAgIGxldCBpbnB1dExhYmVsID0gbSgnbGFiZWwnLCBvdGhlcklucHV0cywge2Zvcjogb3B0aW9uQXR0cnMuaWR9KTtcbiAgICAgICAgbGV0IHdyYXBwZXIgPSBtKCdkaXYnLCBpbnB1dExhYmVsLCB7Y2xhc3NOYW1lOiB3cmFwcGVyQ2xhc3N9KTtcbiAgICAgICAgb3B0aW9ucy5wdXNoKHdyYXBwZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0ZW1wbGF0ZTtcblxuICAgIGlmICh0eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgdGVtcGxhdGUgPSBtKG9wdGlvblR5cGUsIG9wdGlvbnMsIGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wbGF0ZSA9IG0oJ2RpdicsIG9wdGlvbnMsIHtjbGFzc05hbWU6IHR5cGV9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgdXRpbHMuZGVmYXVsdEZpZWxkID0gZmllbGREYXRhID0+IHtcbiAgICBsZXQge2xhYmVsLCBkZXNjcmlwdGlvbiwgc3VidHlwZSwgdHlwZSwgaWQsIGlzUHJldmlldywgLi4uZGF0YX0gPSBmaWVsZERhdGE7XG4gICAgaWYgKGlkKSB7XG4gICAgICBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgICAgICBkYXRhLm5hbWUgPSBkYXRhLm5hbWUgKyAnLXByZXZpZXcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGEubmFtZSA9IHV0aWxzLm5hbWVBdHRyKGZpZWxkRGF0YSkgKyAnLXByZXZpZXcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkYXRhLmlkID0gZGF0YS5uYW1lO1xuICAgIH1cbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIGRhdGEudGl0bGUgPSBkZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgaWYgKHN1YnR5cGUpIHtcbiAgICAgIHR5cGUgPSBzdWJ0eXBlO1xuICAgIH1cblxuICAgIGxldCBmaWVsZCA9IHtcbiAgICAgIGZpZWxkOiBtKHR5cGUsIHV0aWxzLnBhcnNlZEh0bWwobGFiZWwpLCBkYXRhKSxcbiAgICAgIG9uUmVuZGVyOiB1dGlscy5ub29wXG4gICAgfTtcblxuICAgIHJldHVybiAoKSA9PiBmaWVsZDtcbiAgfTtcblxuICAvKipcbiAgICogTG9hZHMgYW4gYXJyYXkgb2Ygc2NyaXB0cyB1c2luZyBqUXVlcnkncyBgZ2V0U2NyaXB0YFxuICAgKiBAcGFyYW0gIHtBcnJheXxTdHJpbmd9ICBzY3JpcHRTY3IgICAgc2NyaXB0c1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHBhdGggICBvcHRpb25hbCB0byBsb2FkIGZvcm1cbiAgICogQHJldHVybiB7UHJvbWlzZX0gICAgICAgYSBwcm9taXNlXG4gICAqL1xuICB1dGlscy5nZXRTY3JpcHRzID0gKHNjcmlwdFNjciwgcGF0aCkgPT4ge1xuICAgIGNvbnN0ICQgPSBqUXVlcnk7XG4gICAgbGV0IF9hcnIgPSBbXTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShzY3JpcHRTY3IpKSB7XG4gICAgICBzY3JpcHRTY3IgPSBbc2NyaXB0U2NyXTtcbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzLmlzQ2FjaGVkKHNjcmlwdFNjcikpIHtcbiAgICAgIF9hcnIgPSAkLm1hcChzY3JpcHRTY3IsIHNyYyA9PiB7XG4gICAgICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICB1cmw6IChwYXRoIHx8ICcnKSArIHNyY1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gJC5hamF4KG9wdGlvbnMpLmRvbmUoKCkgPT4gd2luZG93LmZiTG9hZGVkLmpzLnB1c2goc3JjKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBfYXJyLnB1c2goJC5EZWZlcnJlZCggZGVmZXJyZWQgPT4gJCggZGVmZXJyZWQucmVzb2x2ZSApKSk7XG5cbiAgICByZXR1cm4gJC53aGVuKC4uLl9hcnIpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcmVtb3RlIHJlc291cmNlIGlzIGFscmVhZHkgbG9hZGVkXG4gICAqIEBwYXJhbSAge1N0cmluZ3xBcnJheX0gc3JjICB1cmwgb2YgcmVtb3RlIHNjcmlwdCBvciBjc3NcbiAgICogQHBhcmFtICB7U3RyaW5nfSAgICAgICB0eXBlICAgICAgICdqcycgb3IgJ2NzcydcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gICAgICBpc0NhY2hlZFxuICAgKi9cbiAgdXRpbHMuaXNDYWNoZWQgPSAoc3JjLCB0eXBlID0gJ2pzJykgPT4ge1xuICAgIGxldCBpc0NhY2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGNhY2hlID0gd2luZG93LmZiTG9hZGVkW3R5cGVdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNyYykpIHtcbiAgICAgIGlzQ2FjaGVkID0gc3JjLmV2ZXJ5KHMgPT4gdXRpbHMuaW5BcnJheShzLCBjYWNoZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0NhY2hlZCA9IHV0aWxzLmluQXJyYXkoc3JjLCBjYWNoZSk7XG4gICAgfVxuICAgIHJldHVybiBpc0NhY2hlZDtcbiAgfTtcblxuICAvKipcbiAgICogQXBwZW5kcyBzdHlsZXNoZWV0cyB0byB0aGUgaGVhZFxuICAgKiBAcGFyYW0gIHtBcnJheX0gc2NyaXB0U2NyXG4gICAqIEBwYXJhbSAge1N0cmluZ30gcGF0aFxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgdXRpbHMuZ2V0U3R5bGVzID0gKHNjcmlwdFNjciwgcGF0aCkgPT4ge1xuICAgIGlmICh1dGlscy5pc0NhY2hlZChzY3JpcHRTY3IsICdjc3MnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhcHBlbmRTdHlsZSA9IChocmVmKSA9PiB7XG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgbGluay50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgbGluay5ocmVmID0gaHJlZjtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICB3aW5kb3cuZmJMb2FkZWQuY3NzLnB1c2goaHJlZik7XG4gICAgfTtcbiAgICBzY3JpcHRTY3IuZm9yRWFjaChzcmMgPT4gYXBwZW5kU3R5bGUoKHBhdGggfHwgJycpICsgc3JjKSk7XG4gIH07XG5cbiAgdXRpbHMubG9uZ1RleHRUZW1wbGF0ZSA9IGRhdGEgPT4ge1xuICAgIGxldCB7dmFsdWUgPSAnJywgLi4uYXR0cnN9ID0gZGF0YTtcbiAgICBsZXQgdGVtcGxhdGUgPSB7XG4gICAgICBmaWVsZDogbSgndGV4dGFyZWEnLCB1dGlscy5wYXJzZWRIdG1sKHZhbHVlKSwgYXR0cnMpXG4gICAgfTtcbiAgICBsZXQgZWRpdG9ycyA9IHtcbiAgICAgIHRpbnltY2U6IHtcbiAgICAgICAganM6IFsnLy9jZG4udGlueW1jZS5jb20vNC90aW55bWNlLm1pbi5qcyddLFxuICAgICAgICBvblJlbmRlcjogZXZ0ID0+IHtcbiAgICAgICAgICBpZiAod2luZG93LnRpbnltY2UuZWRpdG9yc1tkYXRhLmlkXSkge1xuICAgICAgICAgICAgd2luZG93LnRpbnltY2UuZWRpdG9yc1tkYXRhLmlkXS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2luZG93LnRpbnltY2UuaW5pdCh7XG4gICAgICAgICAgICB0YXJnZXQ6IHRlbXBsYXRlLmZpZWxkLFxuICAgICAgICAgICAgaGVpZ2h0OiAyNTAsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICdhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvcicsXG4gICAgICAgICAgICAgICdzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4nLFxuICAgICAgICAgICAgICAnaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgY29udGV4dG1lbnUgcGFzdGUgY29kZSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB0b29sYmFyOiAnaW5zZXJ0ZmlsZSB1bmRvIHJlZG8gfCBzdHlsZXNlbGVjdCB8IGJvbGQgaXRhbGljIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgYWxpZ25qdXN0aWZ5IHwgYnVsbGlzdCBudW1saXN0IG91dGRlbnQgaW5kZW50IHwgbGluayBpbWFnZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHF1aWxsOiB7XG4gICAgICAgIGpzOiBbJy8vY2RuLnF1aWxsanMuY29tLzEuMS4zL3F1aWxsLmpzJ10sXG4gICAgICAgIGNzczogWycvL2Nkbi5xdWlsbGpzLmNvbS8xLjEuMy9xdWlsbC5zbm93LmNzcyddLFxuICAgICAgICBvblJlbmRlcjogZXZ0ID0+IHtcbiAgICAgICAgICBjb25zdCBEZWx0YSA9IHdpbmRvdy5RdWlsbC5pbXBvcnQoJ2RlbHRhJyk7XG4gICAgICAgICAgd2luZG93LmZiRWRpdG9ycy5xdWlsbFtkYXRhLmlkXSA9IHt9O1xuICAgICAgICAgIGxldCBlZGl0b3IgPSB3aW5kb3cuZmJFZGl0b3JzLnF1aWxsW2RhdGEuaWRdO1xuICAgICAgICAgIGVkaXRvci5pbnN0YW5jZSA9IG5ldyB3aW5kb3cuUXVpbGwodGVtcGxhdGUuZmllbGQsIHtcbiAgICAgICAgICAgIG1vZHVsZXM6IHtcbiAgICAgICAgICAgICAgdG9vbGJhcjogW1xuICAgICAgICAgICAgICAgIFt7J2hlYWRlcic6IFsxLCAyLCBmYWxzZV19XSxcbiAgICAgICAgICAgICAgICBbJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZSddLFxuICAgICAgICAgICAgICAgIFsnY29kZS1ibG9jayddXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogYXR0cnMucGxhY2Vob2xkZXIgfHwgJycsXG4gICAgICAgICAgICB0aGVtZTogJ3Nub3cnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWRpdG9yLmRhdGEgPSBuZXcgRGVsdGEoKTtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGVkaXRvci5pbnN0YW5jZS5zZXRDb250ZW50cyh3aW5kb3cuSlNPTi5wYXJzZSh1dGlscy5wYXJzZWRIdG1sKHZhbHVlKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlZGl0b3IuaW5zdGFuY2Uub24oJ3RleHQtY2hhbmdlJywgZnVuY3Rpb24oZGVsdGEpIHtcbiAgICAgICAgICAgIGVkaXRvci5kYXRhID0gZWRpdG9yLmRhdGEuY29tcG9zZShkZWx0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ3RleHRhcmVhJykge1xuICAgICAgdGVtcGxhdGUub25SZW5kZXIgPSBlZGl0b3JzW2RhdGEudHlwZV0ub25SZW5kZXI7XG4gICAgfVxuICAgIGlmIChkYXRhLnR5cGUgPT09ICdxdWlsbCcpIHtcbiAgICAgIHRlbXBsYXRlLmZpZWxkID0gbSgnZGl2JywgbnVsbCwgYXR0cnMpO1xuICAgIH1cblxuICAgIGNvbnN0IG9uUmVuZGVyID0gKCkgPT4ge1xuICAgICAgaWYgKGVkaXRvcnNbZGF0YS50eXBlXSkge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmaWVsZFJlbmRlcmVkJywgb25SZW5kZXIpO1xuXG4gICAgICAgIGlmIChlZGl0b3JzW2RhdGEudHlwZV0uY3NzKSB7XG4gICAgICAgICAgdXRpbHMuZ2V0U3R5bGVzKGVkaXRvcnNbZGF0YS50eXBlXS5jc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlZGl0b3JzW2RhdGEudHlwZV0uanMgJiYgIXV0aWxzLmlzQ2FjaGVkKGVkaXRvcnNbZGF0YS50eXBlXS5qcykpIHtcbiAgICAgICAgICB1dGlscy5nZXRTY3JpcHRzKGVkaXRvcnNbZGF0YS50eXBlXS5qcykuZG9uZSh0ZW1wbGF0ZS5vblJlbmRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVtcGxhdGUub25SZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4ge2ZpZWxkOiB0ZW1wbGF0ZS5maWVsZCwgb25SZW5kZXJ9O1xuICB9O1xuXG4gIHV0aWxzLnRlbXBsYXRlcyA9IFtcbiAgICBbJ2F1dG9jb21wbGV0ZScsXG4gICAgICBmaWVsZERhdGEgPT4ge1xuICAgICAgbGV0IGF0dHJzID0gdXRpbHMucHJvY2Vzc0ZpZWxkRGF0YUF0dHJzKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCBmaWVsZExhYmVsID0gdXRpbHMubWFrZUxhYmVsKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCBhdXRvY29tcGxldGUgPSB1dGlscy5hdXRvY29tcGxldGVUZW1wbGF0ZShhdHRycyk7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHtcbiAgICAgICAgICBmaWVsZDogW2ZpZWxkTGFiZWwsIGF1dG9jb21wbGV0ZS5maWVsZF0sXG4gICAgICAgICAgb25SZW5kZXI6IGF1dG9jb21wbGV0ZS5vblJlbmRlclxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XSxcbiAgICBbZGVmYXVsdFN1YnR5cGVzLnRleHQuY29uY2F0KFsnbnVtYmVyJywgJ2ZpbGUnLCAnZGF0ZSddKSxcbiAgICAgIGZpZWxkRGF0YSA9PiB7XG4gICAgICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhmaWVsZERhdGEpO1xuICAgICAgICBsZXQgZmllbGRMYWJlbCA9IHV0aWxzLm1ha2VMYWJlbChmaWVsZERhdGEpO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSB7XG4gICAgICAgICAgZmllbGQ6IFtmaWVsZExhYmVsLCBtKCdpbnB1dCcsIG51bGwsIGF0dHJzKV0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1dLFxuICAgIFtbJ3BhcmFncmFwaCddLmNvbmNhdChkZWZhdWx0U3VidHlwZXMucGFyYWdyYXBoKSxcbiAgICAgIGZpZWxkRGF0YSA9PiB7XG4gICAgICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhmaWVsZERhdGEpO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSB7XG4gICAgICAgICAgZmllbGQ6IFttKGZpZWxkRGF0YS50eXBlLCB1dGlscy5wYXJzZWRIdG1sKGZpZWxkRGF0YS5sYWJlbCksIGF0dHJzKV0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1dLFxuICAgIFtkZWZhdWx0U3VidHlwZXMuYnV0dG9uLFxuICAgICAgZmllbGREYXRhID0+IHtcbiAgICAgICAgbGV0IGF0dHJzID0gdXRpbHMucHJvY2Vzc0ZpZWxkRGF0YUF0dHJzKGZpZWxkRGF0YSk7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHtcbiAgICAgICAgICBmaWVsZDogbSgnYnV0dG9uJywgZmllbGREYXRhLmxhYmVsLCBhdHRycyksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1dLFxuICAgIFtbJ3NlbGVjdCcsICdjaGVja2JveC1ncm91cCcsICdyYWRpby1ncm91cCcsICdjaGVja2JveCddLFxuICAgICAgZmllbGREYXRhID0+IHtcbiAgICAgICAgbGV0IGZpZWxkTGFiZWwgPSB1dGlscy5tYWtlTGFiZWwoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IGZpZWxkID0gdXRpbHMuc2VsZWN0VGVtcGxhdGUoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0ge1xuICAgICAgICAgIGZpZWxkOiBbZmllbGRMYWJlbCwgZmllbGRdXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1dLFxuICAgIFtbJ3RleHRhcmVhJywgJ3RpbnltY2UnLCAncXVpbGwnXSxcbiAgICAgIGZpZWxkRGF0YSA9PiB7XG4gICAgICAgIGxldCBhdHRycyA9IHV0aWxzLnByb2Nlc3NGaWVsZERhdGFBdHRycyhmaWVsZERhdGEpO1xuICAgICAgICBsZXQgZmllbGQgPSB1dGlscy5sb25nVGV4dFRlbXBsYXRlKGF0dHJzKTtcbiAgICAgICAgbGV0IGZpZWxkTGFiZWwgPSB1dGlscy5tYWtlTGFiZWwoZmllbGREYXRhKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0ge1xuICAgICAgICAgIGZpZWxkOiBbZmllbGRMYWJlbCwgZmllbGQuZmllbGRdLFxuICAgICAgICAgIG9uUmVuZGVyOiBmaWVsZC5vblJlbmRlclxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XVxuICAgIF07XG5cbiAgdXRpbHMucHJvY2Vzc0ZpZWxkRGF0YUF0dHJzID0gZmllbGREYXRhID0+IHtcbiAgICBsZXQge1xuICAgICAgbGFiZWwsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHN1YnR5cGUsXG4gICAgICAuLi5hdHRyc30gPSBmaWVsZERhdGE7XG5cbiAgICBpZiAoIWF0dHJzLmlkKSB7XG4gICAgICBhdHRycy5pZCA9IGF0dHJzLm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHN1YnR5cGUpIHtcbiAgICAgIGF0dHJzLnR5cGUgPSBzdWJ0eXBlO1xuICAgIH1cblxuICAgIGlmIChhdHRycy5tdWx0aXBsZSB8fCBhdHRycy50eXBlID09PSAnY2hlY2tib3gtZ3JvdXAnKSB7XG4gICAgICBhdHRycy5uYW1lID0gYXR0cnMubmFtZSArICdbXSc7XG4gICAgfVxuXG4gICAgaWYgKGF0dHJzLnJlcXVpcmVkKSB7XG4gICAgICBhdHRycy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICBhdHRyc1snYXJpYS1yZXF1aXJlZCddID0gJ3RydWUnO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRycztcbiAgfTtcblxuICB1dGlscy5nZXRUZW1wbGF0ZSA9IChmaWVsZERhdGEsIGlzUHJldmlldyA9IGZhbHNlKSA9PiB7XG4gICAgbGV0IGZpZWxkO1xuICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgIGlmIChmaWVsZERhdGEubmFtZSkge1xuICAgICAgICBmaWVsZERhdGEubmFtZSA9IGZpZWxkRGF0YS5uYW1lICsgJy1wcmV2aWV3JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkRGF0YS5uYW1lID0gdXRpbHMubmFtZUF0dHIoZmllbGREYXRhKSArICctcHJldmlldyc7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCB0ZW1wbGF0ZSA9IHV0aWxzLnRlbXBsYXRlTWFwKGZpZWxkRGF0YS50eXBlKTtcblxuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZShmaWVsZERhdGEsIGlzUHJldmlldyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBsYXRlID0gdXRpbHMuZGVmYXVsdEZpZWxkKGZpZWxkRGF0YSwgaXNQcmV2aWV3KSgpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZERhdGEudHlwZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgIGxldCB3cmFwcGVyQXR0cnMgPSB7fTtcbiAgICAgIGlmIChmaWVsZERhdGEubmFtZSkge1xuICAgICAgICB3cmFwcGVyQXR0cnMuY2xhc3NOYW1lID1cbiAgICAgICAgYGZiLSR7ZmllbGREYXRhLnR5cGV9IGZvcm0tZ3JvdXAgZmllbGQtJHtmaWVsZERhdGEubmFtZX1gO1xuICAgICAgfVxuICAgICAgZmllbGQgPSB1dGlscy5tYXJrdXAoJ2RpdicsIHRlbXBsYXRlLmZpZWxkLCB3cmFwcGVyQXR0cnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgYXR0cnMgPSB1dGlscy5wcm9jZXNzRmllbGREYXRhQXR0cnMoZmllbGREYXRhKTtcbiAgICAgIGZpZWxkID0gdXRpbHMubWFya3VwKCdpbnB1dCcsIG51bGwsIGF0dHJzKTtcbiAgICB9XG5cbiAgICBpZiAodGVtcGxhdGUub25SZW5kZXIpIHtcbiAgICAgIGZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2ZpZWxkUmVuZGVyZWQnLCB0ZW1wbGF0ZS5vblJlbmRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkO1xuICB9O1xuXG4vKipcbiAqIENhbGxiYWNrIGZvciBvdGhlciBvcHRpb24uXG4gKiBUb2dnbGVzIHRoZSBoaWRkZW4gdGV4dCBhcmVhIGZvciBcIm90aGVyXCIgb3B0aW9uLlxuICogQHBhcmFtICB7U3RyaW5nfSBvdGhlcklkIGlkIG9mIHRoZSBcIm90aGVyXCIgb3B0aW9uIGlucHV0XG4gKi9cbnV0aWxzLm90aGVyT3B0aW9uQ0IgPSBvdGhlcklkID0+IHtcbiAgY29uc3Qgb3RoZXJJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG90aGVySWQpO1xuICBjb25zdCBvdGhlcklucHV0VmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtvdGhlcklkfS12YWx1ZWApO1xuXG4gIGlmIChvdGhlcklucHV0LmNoZWNrZWQpIHtcbiAgICBvdGhlcklucHV0VmFsdWUuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICB9IGVsc2Uge1xuICAgIG90aGVySW5wdXRWYWx1ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG59O1xuXG4vKipcbiAqIENhcGl0YWxpemVzIGEgc3RyaW5nXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHN0ciB1bmNhcGl0YWxpemVkIHN0cmluZ1xuICogQHJldHVybiB7U3RyaW5nfSBzdHIgY2FwaXRhbGl6ZWQgc3RyaW5nXG4gKi9cbnV0aWxzLmNhcGl0YWxpemUgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcYlxcdy9nLCBmdW5jdGlvbihtKSB7XG4gICAgICByZXR1cm4gbS50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xufTtcblxuXG51dGlscy5tZXJnZSA9IChvYmoxLCBvYmoyKSA9PiB7XG4gIGxldCBtZXJnZWRPYmogPSBPYmplY3QuYXNzaWduKHt9LCBvYmoxLCBvYmoyKTtcbiAgZm9yIChsZXQgcHJvcCBpbiBvYmoyKSB7XG4gICAgaWYgKG1lcmdlZE9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqMltwcm9wXSkpIHtcbiAgICAgICAgbWVyZ2VkT2JqW3Byb3BdID0gQXJyYXkuaXNBcnJheShvYmoxW3Byb3BdKSA/IHV0aWxzLnVuaXF1ZShvYmoxW3Byb3BdLmNvbmNhdChvYmoyW3Byb3BdKSkgOiBvYmoyW3Byb3BdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqMltwcm9wXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbWVyZ2VkT2JqW3Byb3BdID0gdXRpbHMubWVyZ2Uob2JqMVtwcm9wXSwgb2JqMltwcm9wXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXJnZWRPYmpbcHJvcF0gPSBvYmoyW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWVyZ2VkT2JqO1xufTtcblxudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcnMgPSAoZWwsIGV2dHMsIGZuKSA9PiB7XG4gIHJldHVybiBldnRzLnNwbGl0KCcgJykuZm9yRWFjaChlID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoZSwgZm4sIGZhbHNlKSk7XG59O1xuXG4vKipcbiAqIEZpbmQgdGhlIGNsb3Nlc3QgcGFyZW50IGJ5IGNsYXNzXG4gKiBAcGFyYW0gIHtPYmplY3R9IGVsICBET00gZWxlbWVudFxuICogQHBhcmFtICB7U3RyaW5nfSBjbHMgY2xhc3NcbiAqIEByZXR1cm4ge09iamVjdH0gICAgIERPTSBFbGVtZW50XG4gKi9cbnV0aWxzLmNsb3Nlc3QgPSAoZWwsIGNscykgPT4ge1xuICBsZXQgY2xhc3NOYW1lID0gY2xzLnJlcGxhY2UoJy4nLCAnJyk7XG4gIHdoaWxlICgoZWwgPSBlbC5wYXJlbnRFbGVtZW50KSAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpO1xuICByZXR1cm4gZWw7XG59O1xuXG51dGlscy5ub29wID0gKCkgPT4gbnVsbDtcblxudXRpbHMuZGVib3VuY2UgPSAoZnVuYywgd2FpdCA9IDI1MCwgaW1tZWRpYXRlID0gZmFsc2UpID0+IHtcbiAgbGV0IHRpbWVvdXQ7XG4gIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgbGV0IGNvbnRleHQgPSB0aGlzO1xuICAgIGxldCBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH07XG4gICAgbGV0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICBpZiAoY2FsbE5vdykge1xuICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIG1vYmlsZSBjbGFzc1xuICogQHRvZG8gZmluZCBjc3Mgb25seSBzb2x1dGlvblxuICogQHJldHVybiB7U3RyaW5nfSBNb2JpbGUgY2xhc3MgYWRkZWQgdG8gZm9ybUJ1aWxkZXJcbiAqL1xudXRpbHMubW9iaWxlQ2xhc3MgPSAoKSA9PiB7XG4gIGxldCBtb2JpbGVDbGFzcyA9ICcnO1xuICAoZnVuY3Rpb24oYSkge1xuICAgIGlmICgvKGFuZHJvaWR8YmJcXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVxcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXFwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgY2V8eGRhfHhpaW5vL2kudGVzdChhKSB8fCAvMTIwN3w2MzEwfDY1OTB8M2dzb3w0dGhwfDUwWzEtNl1pfDc3MHN8ODAyc3xhIHdhfGFiYWN8YWMoZXJ8b298c1xcLSl8YWkoa298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXxcXC1tfHIgfHMgKXxhdmFufGJlKGNrfGxsfG5xKXxiaShsYnxyZCl8YmwoYWN8YXopfGJyKGV8dil3fGJ1bWJ8YndcXC0obnx1KXxjNTVcXC98Y2FwaXxjY3dhfGNkbVxcLXxjZWxsfGNodG18Y2xkY3xjbWRcXC18Y28obXB8bmQpfGNyYXd8ZGEoaXR8bGx8bmcpfGRidGV8ZGNcXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFxcLWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseShcXC18Xyl8ZzEgdXxnNTYwfGdlbmV8Z2ZcXC01fGdcXC1tb3xnbyhcXC53fG9kKXxncihhZHx1bil8aGFpZXxoY2l0fGhkXFwtKG18cHx0KXxoZWlcXC18aGkocHR8dGEpfGhwKCBpfGlwKXxoc1xcLWN8aHQoYyhcXC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXFwtKDIwfGdvfG1hKXxpMjMwfGlhYyggfFxcLXxcXC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XFwvKXxrbG9ufGtwdCB8a3djXFwtfGt5byhjfGspfGxlKG5vfHhpKXxsZyggZ3xcXC8oa3xsfHUpfDUwfDU0fFxcLVthLXddKXxsaWJ3fGx5bnh8bTFcXC13fG0zZ2F8bTUwXFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bVxcLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFxcLXwgfG98dil8enopfG10KDUwfHAxfHYgKXxtd2JwfG15d2F8bjEwWzAtMl18bjIwWzItM118bjMwKDB8Mil8bjUwKDB8Mnw1KXxuNygwKDB8MSl8MTApfG5lKChjfG0pXFwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcXC0oWzEtOF18YykpfHBoaWx8cGlyZXxwbChheXx1Yyl8cG5cXC0yfHBvKGNrfHJ0fHNlKXxwcm94fHBzaW98cHRcXC1nfHFhXFwtYXxxYygwN3wxMnwyMXwzMnw2MHxcXC1bMi03XXxpXFwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVxcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aFxcLXxvb3xwXFwtKXxzZGtcXC98c2UoYyhcXC18MHwxKXw0N3xtY3xuZHxyaSl8c2doXFwtfHNoYXJ8c2llKFxcLXxtKXxza1xcLTB8c2woNDV8aWQpfHNtKGFsfGFyfGIzfGl0fHQ1KXxzbyhmdHxueSl8c3AoMDF8aFxcLXx2XFwtfHYgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXFwtfHRkZ1xcLXx0ZWwoaXxtKXx0aW1cXC18dFxcLW1vfHRvKHBsfHNoKXx0cyg3MHxtXFwtfG0zfG01KXx0eFxcLTl8dXAoXFwuYnxnMXxzaSl8dXRzdHx2NDAwfHY3NTB8dmVyaXx2aShyZ3x0ZSl8dmsoNDB8NVswLTNdfFxcLXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoXFwtfCApfHdlYmN8d2hpdHx3aShnIHxuY3xudyl8d21sYnx3b251fHg3MDB8eWFzXFwtfHlvdXJ8emV0b3x6dGVcXC0vaS50ZXN0KGEuc3Vic3RyKDAsIDQpKSkge1xuICAgICAgbW9iaWxlQ2xhc3MgPSAnIGZiLW1vYmlsZSc7XG4gICAgfVxuICB9KShuYXZpZ2F0b3IudXNlckFnZW50IHx8IG5hdmlnYXRvci52ZW5kb3IgfHwgd2luZG93Lm9wZXJhKTtcbiAgcmV0dXJuIG1vYmlsZUNsYXNzO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IGNvbnZlcnRzIG1lc3N5IGBjbCNzc05hbWVzYCBpbnRvIHZhbGlkIGBjbGFzcy1uYW1lc2BcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7U3RyaW5nfSBoeXBoZW5hdGVkIHN0cmluZ1xuICovXG51dGlscy5tYWtlQ2xhc3NOYW1lID0gc3RyID0+IHtcbiAgcmV0dXJuIHV0aWxzLmh5cGhlbkNhc2Uoc3RyLnJlcGxhY2UoL1teXFx3XFxzXFwtXS9naSwgJycpKTtcbn07XG5cbi8qKlxuICogTWFrZSBzdHJpbmdzIHNhZmUgdG8gYmUgdXNlZCBhcyBjbGFzc2VzXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBzdHIgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZFxuICogQHJldHVybiB7U3RyaW5nfSAgICAgY29udmVydGVyIHN0cmluZ1xuICovXG51dGlscy5zYWZlbmFtZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFxzL2csICctJykucmVwbGFjZSgvW15hLXpBLVowLTlcXFtcXF1cXF8tXS9nLCAnJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICogU3RyaXBzIG5vbi1udW1iZXJzIGZyb20gYSBudW1iZXIgb25seSBpbnB1dFxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gc3RyIHN0cmluZyB3aXRoIHBvc3NpYmxlIG51bWJlclxuICogQHJldHVybiB7c3RyaW5nfSAgICAgc3RyaW5nIHdpdGhvdXQgbnVtYmVyc1xuICovXG51dGlscy5mb3JjZU51bWJlciA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvW14wLTldL2csICcnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19 diff --git a/dist/form-builder.min.css b/dist/form-builder.min.css index db1c4de3e..fb129a3d7 100644 --- a/dist/form-builder.min.css +++ b/dist/form-builder.min.css @@ -3,4 +3,4 @@ formBuilder - https://formbuilder.online/ Version: 2.1.0 Author: Kevin Chappell */ -@charset "UTF-8";.btn,.btn-group{display:inline-block}.btn-group>.btn,.input-group .form-control{position:relative;float:left}.btn,.btn.active,.btn.btn-active,.btn:active,.form-control{background-image:none}.btn,.btn-group{vertical-align:middle}@font-face{font-family:form-builder-font;src:url(data:application/vnd.ms-fontobject;base64,JDIAAFgxAAABAAIAAAAAAAIABQMAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAASBjFqAAAAAAAAAAAAAAAAAAAAAAAACIAZgBvAHIAbQAtAGIAdQBpAGwAZABlAHIALQBmAG8AbgB0AAAADgBSAGUAZwB1AGwAYQByAAAAFgBWAGUAcgBzAGkAbwBuACAAMQAuADAAAAAiAGYAbwByAG0ALQBiAHUAaQBsAGQAZQByAC0AZgBvAG4AdAAAAAAAAAEAAAAPAIAAAwBwR1NVQiCMJXkAAAD8AAAAVE9TLzI+IFOhAAABUAAAAFZjbWFwtpWMLAAAAagAAAJoY3Z0IAbV/wQAACVAAAAAIGZwZ22KkZBZAAAlYAAAC3BnYXNwAAAAEAAAJTgAAAAIZ2x5ZsRmq7cAAAQQAAAcKGhlYWQMmK7hAAAgOAAAADZoaGVhBzwDZAAAIHAAAAAkaG10eEPe//8AACCUAAAASGxvY2FLJkPyAAAg3AAAACZtYXhwAoUMmAAAIQQAAAAgbmFtZdVcxaEAACEkAAADOXBvc3Q+0jAQAAAkYAAAANVwcmVw5UErvAAAMNAAAACGAAEAAAAKADAAPgACbGF0bgAOREZMVAAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAEDxQGQAAUAAAJ6ArwAAACMAnoCvAAAAeAAMQECAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAQOgA8k0DUv9qAFoDUgCWAAAAAQAAAAAAAAAAAAUAAAADAAAALAAAAAQAAAGMAAEAAAAAAIYAAwABAAAALAADAAoAAAGMAAQAWgAAAAoACAACAALoC+gN6BHyTf//AADoAOgN6A/yTf//AAAAAAAAAAAAAQAKACAAIAAkAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAADcAAAAAAAAABEAAOgAAADoAAAAAAEAAOgBAADoAQAAAAIAAOgCAADoAgAAAAMAAOgDAADoAwAAAAQAAOgEAADoBAAAAAUAAOgFAADoBQAAAAYAAOgGAADoBgAAAAcAAOgHAADoBwAAAAgAAOgIAADoCAAAAAkAAOgJAADoCQAAAAoAAOgKAADoCgAAAAsAAOgLAADoCwAAAAwAAOgNAADoDQAAAA0AAOgPAADoDwAAAA4AAOgQAADoEAAAAA8AAOgRAADoEQAAABAAAPJNAADyTQAAABEAEAAA/2oD6ANSAAMABwALAA8AEwAXABsAHwAjACcAKwBLAFAAVABYAHwCPEuwFFBYQJEEAQIjKCMCZQoBCCUkJQgkbQAkKiUkKmshAR8WLBYfZQAsICAsYxQTEQMPHQ4dD2UVEhADDh4eDmMcARgpASMCGCNgACgnMA0vBAcAKAdeBQMCAAsJAgEGAAFeJgwCBgAlCAYlXi4BKi0rAhYfKhZfMiIxAyAAHQ8gHV8bARkZGlYAGhoMSAAeHhdZABcXDRdJG0uwFVBYQJQEAQIjKCMCKG0KAQglJCUIJG0AJColJCprIQEfFiwWHyxtACwgICxjFBMRAw8dDh0PZRUSEAMOHh0OHmscARgpASMCGCNgACgnMA0vBAcAKAdeBQMCAAsJAgEGAAFeJgwCBgAlCAYlXi4BKi0rAhYfKhZfMiIxAyAAHQ8gHV8bARkZGlYAGhoMSAAeHhdZABcXDRdJG0CWBAECIygjAihtCgEIJSQlCCRtACQqJSQqayEBHxYsFh8sbQAsIBYsIGsUExEDDx0OHQ8ObRUSEAMOHh0OHmscARgpASMCGCNgACgnMA0vBAcAKAdeBQMCAAsJAgEGAAFeJgwCBgAlCAYlXi4BKi0rAhYfKhZfMiIxAyAAHQ8gHV8bARkZGlYAGhoMSAAeHhdZABcXDRdJWVlAalVVUVEYGAwMenh3dnV0c3Jxb2poZ2ZlZGNiYWBfXl1bVVhVWFdWUVRRVFNSUE9OTElHRkVEQ0JBQD44NTIwKyopKCcmJSQjIiEgHx4dHBgbGBsaGRcWFRQTEhEQDA8MDxIRERERERAzBRsrATMVIycjFTM3IxUzIxUzNRUzNSMXMzUjJxUzNQMzNSMXMzUjFzM1IzMjFTMBFRQOASsBERQGIyEiJjURND4BMyE1IzUhFSMVITIeAQMpARUhJTUjFTM1IxUBNCYjIREjNSM1MzUjNTM1ISIGHQEUFjMhFSMVITUjNSEyNjUBdz8/fT4+fT4++j8+Pn0+Pj8/vD8/fT8/fT8/vD8/AbUaKxkfIhz9EhwjGisZAZZ9ATl9AVcZKxq7/on+iQLu/Y8/vD8CsBIO/qk/Pj4+Pv5qDhERDgGWfQE5fQFXDhICGj99Pj4+Pz99Pj4+Pz8//c0/Pz8/Pz8CkPoZKhr+iBwiIhwCzxkrGj8+Pj8aK/3UvPs+Pj4+AdQOEv7HPz4/Pj8SDvoOET4/Pz4RDgAAAA8AAP9qA6EDUgADAAcACwAPABMAFwAbAB8AIwAzADcAOwA/AE8AcwCYQJVBJQIdEkktJAMTHQJHIR8CHRMJHVQbARMZFw0DCQgTCV8YFgwDCBURBwMFBAgFXhQQBgMEDwsDAwEABAFeGgESEh5YIAEeHgxIDgoCAwAAHFgAHBwNHElycG1qZ2ZjYF1bVlNNTEVEPz49PDs6OTg3NjU0MS8pJyMiISAfHh0cGxoZGBcWFRQTEhERERERERERECIFHSsXMzUjFzM1IyczNSMXMzUjJzM1IwEzNSMnMzUjATM1IyczNSMDNTQmJyMiBgcVFBY3MzI2ATM1IyczNSMXMzUjNzU0JicjIgYXFRQWNzMyNjcRFAYjISImNRE0NjsBNTQ2OwEyFh0BMzU0NjsBMhYHFTMyFkehocWyssWhocWyssWhoQGbs7PWsrIBrKGh1rOzxAwGJAcKAQwGJAcKAZuhodazs9ahoRIKCCMHDAEKCCMICtcsHPzuHSoqHUg0JSQlNNY2JCMlNgFHHSpPoaGhJLKysiSh/cSh+qH9xKEksgEwoQcKAQwGoQcMAQr+JrIkoaGha6EHCgEMBqEHDAEKLP01HSoqHQLLHSo2JTQ0JTY2JTQ0JTYqAAAAAgAA/8gD4gLCABQAKQAyQC8ZGBcWFRMABwMCAUcUAQFFAAEAAgMBAmAAAwAAA1QAAwMAWAAAAwBMNTs3NAQFGCsBERQOASMhIi4BNRE0PgEzITIWFzcHCQEFJTU0JiMhIgYVERQWMyEyNjUDTBorGf3OGSsaGisZAjIhMwqW1f7U/s4BMgEsEQ79zg4SEg4CMg4RAhr+DBkrGhorGQIyGSsaKiFX8/6VAZZktgwOEREO/c4OEhIOAAgAAP+oA+gDUgADAAcACwAPABMAFwAbAB8AbkBrHQEEBR8BCQQZAQgJGwEGCBUBBwYFRx4BBRoBCRYBBgNGFwEHRAADAAIFAwJeCgEFAAQJBQReAAkACAYJCF4ABgsBBwYHWgAAAAFWAAEBDABJDAwICBMSERAMDwwPDg0ICwgLEhERERAMBRkrESE1IRUhNSEFFSE1ETUhFTUhNSEPAScXEwcnFxMHJxcD6PwYA+j8GAF3AjP9zQIz/c19nF5enJxeXpycXl4DFD67Prs/P/3NPz/6P7xeIH4Btl4gfQG1XiB9AAsAAP+oA+gDUgADAAcACwAPABMAIAApADUAPgBLAFQBBUuwFFBYQFoACwIFAgtlGwESCRJwAAMAAgsDAl4YDAIFDQEECgUEYBcBCgAPBgoPYAAGAAcRBgdeGgEQABEOEBFgGQEOABMIDhNgHBQCCBUWAgkSCAlgAAAAAVYAAQEMAEkbQFsACwIFAgsFbRsBEgkScAADAAILAwJeGAwCBQ0BBAoFBGAXAQoADwYKD2AABgAHEQYHXhoBEAARDhARYBkBDgATCA4TYBwUAggVFgIJEggJYAAAAAFWAAEBDABJWUBCTUxAPzc2KyoiIRUUEBBRUExUTVRGRT9LQEs7OjY+Nz4yMCo1KzUmJSEpIikbGhQgFSAQExATEhEREREREREQHQUdKxEhNSEVITUhBSE1IQUhFSEVNSEVAyIuATQ+ATIeARQOASciBhQWMjY0JgMiLgE0PgEzMhYUBiciBhQWMjY0JgMiLgE0PgEyHgEUDgEnIgYUFjI2NCYD6PwYA+j8GAE5AnH9jwJx/Y8Ccf2P2xkrGhorMisaGisZDhERHBERDhkrGhorGSc3NycOEREbEhINGSsaGisyKxoaKxkOEREcEREDFD67Pvo/+j/6Pz8BthoqMisaGisyKhp9EhwRERwS/oIaKzIrGjVSNX0RHBEVFBX+jxorMisaGisyKxp+EhwRERwSAAAAFQAA/6gD6AMUAA8AEwAXABsAHwA3ADsAPwBDAEcASwBPAFMAVwBbAF8AdwB7AH8AgwCHA0FLsAlQWECdADwHOwc8ZUYBODcGBjhlPQEAADY1ADZeADUANCo1NF4zMS8tBCspJCAcGAUCAysCXyhFJUMhQR0/GQkDJ0QjQh9AGz4XCQQFAwReJiIeGhYFBRUTEQ8NBQsMBQteMjAuLAQqFBIQDgQMCioMXgAKAAkICgleAAgABzwIB14AOwA6OTs6XgA5ADc4OTdeAAYBAQZSAAYGAVkAAQYBTRtLsApQWECiADwHOwc8ZUYBODcGBjhlPQEAADY1ADZeADUANCw1NF4AKisCKlIzMS8tBCspJCAcGAUCAysCXyhFJUMhQR0/GQkDJ0QjQh9AGz4XCQQFAwReJiIeGhYFBRUTEQ8NBQsMBQteMjAuAywUEhAOBAwKLAxeAAoACQgKCV4ACAAHPAgHXgA7ADo5OzpeADkANzg5N14ABgEBBlIABgYBWQABBgFNG0uwC1BYQJ4APAc7BzxlRgE4NwY3OAZtPQEAADY1ADZeADUANCo1NF4zMS8tBCspJCAcGAUCAysCXyhFJUMhQR0/GQkDJ0QjQh9AGz4XCQQFAwReJiIeGhYFBRUTEQ8NBQsMBQteMjAuLAQqFBIQDgQMCioMXgAKAAkICgleAAgABzwIB14AOwA6OTs6XgA5ADc4OTdeAAYBAQZSAAYGAVkAAQYBTRtAnwA8BzsHPDttRgE4NwY3OAZtPQEAADY1ADZeADUANCo1NF4zMS8tBCspJCAcGAUCAysCXyhFJUMhQR0/GQkDJ0QjQh9AGz4XCQQFAwReJiIeGhYFBRUTEQ8NBQsMBQteMjAuLAQqFBIQDgQMCioMXgAKAAkICgleAAgABzwIB14AOwA6OTs6XgA5ADc4OTdeAAYBAQZSAAYGAVkAAQYBTVlZWUClfHxUVFBQTExISEREQEA8PDg4AgCHhoWEg4KBgHx/fH9+fXt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNgX15dXFtaWVhUV1RXVlVQU1BTUlFMT0xPTk1IS0hLSklER0RHRkVAQ0BDQkE8Pzw/Pj04Ozg7Ojk3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQCgcADwIPRwUUKwEhIgYVERQWMyEyNjURNCYFMxUjFTMVIwEhESE1ITUhNSE1MxUzNTMVMzUzFTM1MxUzNTMVMzUzJRUjPQIzFRcVIz0CMxUXFSM9AjMVFxUjPQIzFRcjNTM1IzUzNSM1IxUjNSMVIzUjFSM1IxUjNSMVIzUhNSE1IQE1IRU1ITUhJyE1IQOq/JUcIyMcA2scIiL8eTIyMjIDa/yVA2v8lQNr/JUyXVJXUV5LXlFeLP1vS1KoUVGpS0uvUVGKMjIyMjJeUVhLXlFeS10yA2v8lQNr/RICcf2PAnF9/gwB9AMUIh39EhwjIxwC7hwjhBINE/2JAiwNEwwTDQ0NDQ0NDQ0NDR8TEw0SEg0TEw0SEg0TEw0SEg0TEw0SEiATDRINBgwMDAwMDAwMDBkME/2VPz99Pz4/AAAQAAD/qAPoA1IADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPAA/AEMARwE1S7AUUFhAZhsBCwMMAwtlAAwEBAxjGRcCFQUWBRVlGhgCFgYGFmMiFBEPBA0HDgcNZRMSEAMOCAgOYwkBBB4cAgEdBAFfJB8jAx0ABRUdBV4ABgAHDQYHXyEBCAAACABdCgEDAwJWIAECAgwDSRtAbBsBCwMMAwsMbQAMBAMMBGsZFwIVBRYFFRZtGhgCFgYFFgZrIhQRDwQNBw4HDQ5tExIQAw4IBw4IawkBBB4cAgEdBAFfJB8jAx0ABRUdBV4ABgAHDQYHXyEBCAAACABdCgEDAwJWIAECAgwDSVlAVUREQEAtLRUVAABER0RHRkVAQ0BDQkE/Pjw7Ojk4NzY1NDMyMS0wLTAvLiwrKikoJyYlJCMiISAfHh0cGxoZFRgVGBcWFBMSERAPDg0ADAAMEzQlBRYrGQExFBYzITI2NREzEQUhFSEVIRUhFTUhFRMjNTMFMxUjETMVIzczFSM3MxUjNxUjNSUzFSM3MxUjNzMVIwEnMwU1MxUzNTMVIxwCcRwi+vxXAnH9jwJx/Y8Ccfq8vPzTPz8/P30/P30/P7w//ok/P30/P30/PwHVP3f8+T8+PwNS/JUcIyMcAjMBOD68u7z6vLwCcbw/Pv3NPj4+Pj4+Pj76Pj4+Pj4BcEX6Pz8/PwAGAAD/qAPoAxQAAwAHAAsADwAfACMAt0uwFFBYQEEAAAQBBABlDAEBCgQBCmsACA4BCwYIC14ABgAHAwYHXgADAAIFAwJeDQEFAAQABQReAAoJCQpSAAoKCVkACQoJTRtAQgAABAEEAAFtDAEBCgQBCmsACA4BCwYIC14ABgAHAwYHXgADAAIFAwJeDQEFAAQABQReAAoJCQpSAAoKCVkACQoJTVlAJiAgCAgAACAjICMiIR4bFhMPDg0MCAsICwoJBwYFBAADAAMRDwUVKzc1IRUlITUhHQEhPQEhFSETETQmIyEiBhURFBYzITI2AxEhEbwB9P4MAnH9jwJx/Y8CcbsiHPyVHCMjHANrHCI+/JWjPj76Pn0+Pvo+/c0C7hwjIh39EhwjIwMK/RIC7gAAAwAA/+cD6ALVAB8AIwAnAFtAWAACAwEBAAIBXgQOAgANAQoLAApeDA8CCwkBBQYLBWAIAQYHBwZSCAEGBgdWAAcGB0ogIAEAJyYlJCAjICMiIRoYFxYVFBMSEQ8KCAcGBQQDAgAfAR8QBRQrASE1MzUjFTMVIyIGFREUFjsBFSMVMzUjNSEyNjURNCYBETMRKQERIQOq/W9e+l6cGyQjHJxe+l4CkRwiI/x6nALP/W8CkQJYPz4+PyYY/okcIz4/Pz4jHAF3GCb+SwF3/okBdwAAAAAEAAD/sQNNAv8ABgAUABkAJACGQBceAQIFHRYOBwQDAhkDAgMAAwEBAQAER0uwElBYQCcABQIFbwACAwJvAAMAA28AAAEBAGMGAQEEBAFSBgEBAQRXAAQBBEsbQCYABQIFbwACAwJvAAMAA28AAAEAbwYBAQQEAVIGAQEBBFcABAEES1lAEgAAISAYFxAPCQgABgAGFAcFFSsXNycHFTMVATQjIgcBBhUUMzI3ATYnFwEjNQEUDwEnNzYyHwEWyzKDM0gBXwwFBP7RBA0FBAEvAx7o/jDoA00UXehdFDsWgxQHM4MzPEcCBgwE/tIEBgwEAS4Ecej+L+kBmh0VXelcFRWDFgAAAAADAAD/qAOqAxQABAAIAA8ARUBCCgEERQgGAgQFBG8ABQAFbwcBAAADAgADXgACAQECUgACAgFWAAECAUoJCQEACQ8JDw4NDAsIBwYFAwIABAEECQUUKyUhFSE1ByM1MwE3FyMRIxEB1f4rA6o/fX39cPr6nLyj+/t9PgG2+vr+xwE5AAAWAAAAAAPoAlgAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwBDAEcASwBPAFMAVwDAQL0pDQsJBwUDBwEoDAoIBgQCBwAPAQBeAA8ADhEPDl4AEQAQExEQXgATABIVExJeABUAFBcVFF4AFwAWGRcWXgAZABgbGRheKyclIyEfHQcbGhobUisnJSMhHx0HGxsaViomJCIgHhwHGhsaSldWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIRERERERERERAsBR0rEzM1IxczNSMXMzUjFzM1IxczNSMXMzUjFzM1IwUzNSMFMzUjBTM1IwUzNSMFMzUjBTM1IwUzNSMXMzUjFzM1IxczNSMXMzUjFzM1IxczNSMTMzUjATM1Iz8+Pn0+Pn0+Pn0+Pn0+Pn0+Pn0+PvzTPz8Dqj4+/FY/PwOqPj78Vj8/A6o+PvzTPz99Pz99Pz99Pz99Pz99Pz99Pz8/Pj78Vj8/Aho+Pj4+Pj4+Pj4+Pj4+fT99Pn0/fT59P30+fT8/Pz8/Pz8/Pz8/Pz8Bdz7+DD8AAAAABwAAAAAD6AJYAAMABwALAA8AGAAhACwCMbcqJyQDCQgBR0uwClBYQE4HAQMACgADCm0RAQoMAApjDQEMCAAMYw8BDgkLBQ5lAAsCBQtjBgECBQkCBWsAAQAAAwEAXhABCAAJDggJYAAFBAQFUgAFBQRXAAQFBEsbS7ALUFhARAcBAwAKAAMKbQ0MEQMKCAAKYw8OAgsJAgULZQYBAgUJAgVrAAEAAAMBAF4QAQgACQsICWAABQQEBVIABQUEVwAEBQRLG0uwEVBYQE4HAQMACgADCm0RAQoMAApjDQEMCAAMYw8BDgkLBQ5lAAsCBQtjBgECBQkCBWsAAQAAAwEAXhABCAAJDggJYAAFBAQFUgAFBQRXAAQFBEsbS7ASUFhAUAcBAwAKAAMKbREBCgwACmMNAQwIAAwIaw8BDgkLCQ4LbQALAgULYwYBAgUJAgVrAAEAAAMBAF4QAQgACQ4ICWAABQQEBVIABQUEVwAEBQRLG0uwE1BYQFEHAQMACgADCm0RAQoMAAoMaw0BDAgADAhrDwEOCQsJDgttAAsCBQtjBgECBQkCBWsAAQAAAwEAXhABCAAJDggJYAAFBAQFUgAFBQRXAAQFBEsbQFIHAQMACgADCm0RAQoMAAoMaw0BDAgADAhrDwEOCQsJDgttAAsCCQsCawYBAgUJAgVrAAEAAAMBAF4QAQgACQ4ICWAABQQEBVIABQUEVwAEBQRLWVlZWVlAIxoZERAsKykoJiUjIh4dGSEaIRUUEBgRGBEREREREREQEgUcKxMhNSEDMxEjEyE1KQEzESMFIgYUFjI2NCYnMhYUBiImNDYXMxU3MwcXIycVIz4Da/yVPj8/PwNr/JUDaz4+/dgiJydDJychMDk5YDo6yR9mKHF5KW0fAho+/ksBd/5KPwF3XzJWMjJWMhlAbEBAbEAEYGBqem5uAAAAAQAA/7EDxQMLAH4ATkBLWVQ0AwYFFwECAQgBAAIDRwgBBAkHAgUGBAVgAAYAAQIGAWAKAQIAAAJUCgECAgBYAwEAAgBMenlwb2tlYF9YVU9OSkR0Fj1gCwUYKwUiJiIGIyImNzQ+Ajc2PQE0JyYjISIPARQXHgEyFhcUBgciJiIGIyImNTQ+Ajc2NScRNzYmNC8BLgEnLgEGJjc0NjcyFjI2MzIWFRQGIgYHBhUXFjMhMjc2PQE0Jy4CNTQ2NzIWMjYzMhYVFAYiBgcGFRMUFx4BMhYXFAYDqxliMmIZDRABEhogCRIBBxX+iBYHARUJIh4UAQwPGmgxXhgNDhIWHgkSAQEBAgIEAggFCCIYFgEMDhpoMGAWDg4SGhwKFAEHDwGGDgcBEwouHA4OGGQvYBgODhQYIgcUARMJIBwSAQxPBAQYDRIQAgYGC0PaDAUDA+BPDAYEEBIOGAEEBBgNERAEBAcNQx8Bxg8NDhwKFAoQAgUEAhASDhgBBAQaDREQBAUMTsQCAgYMsk4MBgIMFg4YAQQEGg0REAQFDU398kIMBgQSEA4YAAEAAP+xAskDCwArAC5AKx0IAgECAUcAAgABAAJlAwEBAW4ABAAABFQABAQAWAAABABMPTMTOCMFBRkrARUUBiMiBwYHBhURFAYrASImNREjERQGKwEiJjURJicmJyY1NDY3NjMhMhYCyRQOHAIOBAEWDTwOFFASEDwOFFI3RiUkY0M+qwELDhQC6SkQJAEDDgYe/X0OFBQOAqj9WA4UFA4BFQcaIUNBUFyFFxUUAAAAAgAA/2oDawNSABsAHwBHQEQEAgIADxANAwUGAAVeDgwCBgsJAgcIBgdeAwEBAQxICgEICA0ISQAAHx4dHAAbABsaGRgXFhUUExEREREREREREREFHSsBNSM3IwcjNyMHIxUzByMVMwczNzMHMzczNSM3ByM3MwNrnB99H/offR/byx+snB99H/offR/byx+c+h/6Adt9+vr6+n36ffr6+vp9+vr6AAAAA////2oD6ANSAA8AHwA7AIRADyMBBAUrAQIGAAkBAQcDR0uwDFBYQCwABAUDBQRlAAMAAAYDAGAABgAHAQYHYAAFBQhYAAgIDEgAAQECWAACAg0CSRtALQAEBQMFBANtAAMAAAYDAGAABgAHAQYHYAAFBQhYAAgIDEgAAQECWAACAg0CSVlADDUhJhQTNTYXIwkFHSsFETQmIyEiBhURFBYXITI2ExEUBiMhIiYnETQ2FyEyFicVIzU0JichIgYHERQWOwEVIyImNxE0NjMhMhYDoQwG/aEICgoIAl8HCkg0Jf2hJTQBNiQCXyU01kgKCP2hBwoBDAZaWiQ2ATQlAl8lNj0CXwgKCgj9oQcKAQwCZf2hJTQ0JQJfJTYBNLFaWgcKAQwG/aEICkg2JAJfJTQ0AAABAAAAAQAAqMUYSF8PPPUACwPoAAAAANTJNaAAAAAA1Mk1oP///2oD6ANSAAAACAACAAAAAAAAAAEAAANS/2oAAAPo/////wPoAAEAAAAAAAAAAAAAAAAAAAASA+gAAAPoAAADoAAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAANZAAAD6AAAA+gAAAPoAAAD6AAAAsoAAANrAAAD6P//AAAAAAHKArgDFAOGBIwG4gfqCIII7AlwCbIKmAv6DM4NJg16DhQAAAABAAAAEgCIABYAAAAAAAIAjgCeAHMAAAFbC3AAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEAEQA1AAEAAAAAAAIABwBGAAEAAAAAAAMAEQBNAAEAAAAAAAQAEQBeAAEAAAAAAAUACwBvAAEAAAAAAAYAEQB6AAEAAAAAAAoAKwCLAAEAAAAAAAsAEwC2AAMAAQQJAAAAagDJAAMAAQQJAAEAIgEzAAMAAQQJAAIADgFVAAMAAQQJAAMAIgFjAAMAAQQJAAQAIgGFAAMAAQQJAAUAFgGnAAMAAQQJAAYAIgG9AAMAAQQJAAoAVgHfAAMAAQQJAAsAJgI1Q29weXJpZ2h0IChDKSAyMDE3IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb3JtLWJ1aWxkZXItZm9udFJlZ3VsYXJmb3JtLWJ1aWxkZXItZm9udGZvcm0tYnVpbGRlci1mb250VmVyc2lvbiAxLjBmb3JtLWJ1aWxkZXItZm9udEdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA3ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AcgBtAC0AYgB1AGkAbABkAGUAcgAtAGYAbwBuAHQAUgBlAGcAdQBsAGEAcgBmAG8AcgBtAC0AYgB1AGkAbABkAGUAcgAtAGYAbwBuAHQAZgBvAHIAbQAtAGIAdQBpAGwAZABlAHIALQBmAG8AbgB0AFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AcgBtAC0AYgB1AGkAbABkAGUAcgAtAGYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwAMYXV0b2NvbXBsZXRlBGRhdGUIY2hlY2tib3gOY2hlY2tib3gtZ3JvdXALcmFkaW8tZ3JvdXAJcmljaC10ZXh0BnNlbGVjdAh0ZXh0YXJlYQR0ZXh0BnBlbmNpbARmaWxlBmhpZGRlbgZidXR0b24GaGVhZGVyCXBhcmFncmFwaAZudW1iZXIEY29weQAAAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAABgAGAAYABgDUv9qA1L/arAALCCwAFVYRVkgIEu4AA5RS7AGU1pYsDQbsChZYGYgilVYsAIlYbkIAAgAY2MjYhshIbAAWbAAQyNEsgABAENgQi2wASywIGBmLbACLCBkILDAULAEJlqyKAEKQ0VjRVJbWCEjIRuKWCCwUFBYIbBAWRsgsDhQWCGwOFlZILEBCkNFY0VhZLAoUFghsQEKQ0VjRSCwMFBYIbAwWRsgsMBQWCBmIIqKYSCwClBYYBsgsCBQWCGwCmAbILA2UFghsDZgG2BZWVkbsAErWVkjsABQWGVZWS2wAywgRSCwBCVhZCCwBUNQWLAFI0KwBiNCGyEhWbABYC2wBCwjISMhIGSxBWJCILAGI0KxAQpDRWOxAQpDsAFgRWOwAyohILAGQyCKIIqwASuxMAUlsAQmUVhgUBthUllYI1khILBAU1iwASsbIbBAWSOwAFBYZVktsAUssAdDK7IAAgBDYEItsAYssAcjQiMgsAAjQmGwAmJmsAFjsAFgsAUqLbAHLCAgRSCwC0NjuAQAYiCwAFBYsEBgWWawAWNgRLABYC2wCCyyBwsAQ0VCKiGyAAEAQ2BCLbAJLLAAQyNEsgABAENgQi2wCiwgIEUgsAErI7AAQ7AEJWAgRYojYSBkILAgUFghsAAbsDBQWLAgG7BAWVkjsABQWGVZsAMlI2FERLABYC2wCywgIEUgsAErI7AAQ7AEJWAgRYojYSBksCRQWLAAG7BAWSOwAFBYZVmwAyUjYUREsAFgLbAMLCCwACNCsgsKA0VYIRsjIVkqIS2wDSyxAgJFsGRhRC2wDiywAWAgILAMQ0qwAFBYILAMI0JZsA1DSrAAUlggsA0jQlktsA8sILAQYmawAWMguAQAY4ojYbAOQ2AgimAgsA4jQiMtsBAsS1RYsQRkRFkksA1lI3gtsBEsS1FYS1NYsQRkRFkbIVkksBNlI3gtsBIssQAPQ1VYsQ8PQ7ABYUKwDytZsABDsAIlQrEMAiVCsQ0CJUKwARYjILADJVBYsQEAQ2CwBCVCioogiiNhsA4qISOwAWEgiiNhsA4qIRuxAQBDYLACJUKwAiVhsA4qIVmwDENHsA1DR2CwAmIgsABQWLBAYFlmsAFjILALQ2O4BABiILAAUFiwQGBZZrABY2CxAAATI0SwAUOwAD6yAQEBQ2BCLbATLACxAAJFVFiwDyNCIEWwCyNCsAojsAFgQiBgsAFhtRAQAQAOAEJCimCxEgYrsHIrGyJZLbAULLEAEystsBUssQETKy2wFiyxAhMrLbAXLLEDEystsBgssQQTKy2wGSyxBRMrLbAaLLEGEystsBsssQcTKy2wHCyxCBMrLbAdLLEJEystsB4sALANK7EAAkVUWLAPI0IgRbALI0KwCiOwAWBCIGCwAWG1EBABAA4AQkKKYLESBiuwcisbIlktsB8ssQAeKy2wICyxAR4rLbAhLLECHistsCIssQMeKy2wIyyxBB4rLbAkLLEFHistsCUssQYeKy2wJiyxBx4rLbAnLLEIHistsCgssQkeKy2wKSwgPLABYC2wKiwgYLAQYCBDI7ABYEOwAiVhsAFgsCkqIS2wKyywKiuwKiotsCwsICBHICCwC0NjuAQAYiCwAFBYsEBgWWawAWNgI2E4IyCKVVggRyAgsAtDY7gEAGIgsABQWLBAYFlmsAFjYCNhOBshWS2wLSwAsQACRVRYsAEWsCwqsAEVMBsiWS2wLiwAsA0rsQACRVRYsAEWsCwqsAEVMBsiWS2wLywgNbABYC2wMCwAsAFFY7gEAGIgsABQWLBAYFlmsAFjsAErsAtDY7gEAGIgsABQWLBAYFlmsAFjsAErsAAWtAAAAAAARD4jOLEvARUqLbAxLCA8IEcgsAtDY7gEAGIgsABQWLBAYFlmsAFjYLAAQ2E4LbAyLC4XPC2wMywgPCBHILALQ2O4BABiILAAUFiwQGBZZrABY2CwAENhsAFDYzgtsDQssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIzAQEVFCotsDUssAAWsAQlsAQlRyNHI2GwCUMrZYouIyAgPIo4LbA2LLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbACYiCwAFBYsEBgWWawAWNhIyAgsAQmI0ZhOBsjsAhDRrACJbAIQ0cjRyNhYCCwBEOwAmIgsABQWLBAYFlmsAFjYCMgsAErI7AEQ2CwASuwBSVhsAUlsAJiILAAUFiwQGBZZrABY7AEJmEgsAQlYGQjsAMlYGRQWCEbIyFZIyAgsAQmI0ZhOFktsDcssAAWICAgsAUmIC5HI0cjYSM8OC2wOCywABYgsAgjQiAgIEYjR7ABKyNhOC2wOSywABawAyWwAiVHI0cjYbAAVFguIDwjIRuwAiWwAiVHI0cjYSCwBSWwBCVHI0cjYbAGJbAFJUmwAiVhuQgACABjYyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=);src:url(data:application/vnd.ms-fontobject;base64,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YyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=) format("embedded-opentype"),url(data:application/octet-stream;base64,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) format("woff2"),url(data:application/font-woff;base64,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) format("woff"),url(data:application/x-font-ttf;base64,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BCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=) format("truetype"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtZXRhZGF0YT5Db3B5cmlnaHQgKEMpIDIwMTcgYnkgb3JpZ2luYWwgYXV0aG9ycyBAIGZvbnRlbGxvLmNvbTwvbWV0YWRhdGE+CjxkZWZzPgo8Zm9udCBpZD0iZm9ybS1idWlsZGVyLWZvbnQiIGhvcml6LWFkdi14PSIxMDAwIiA+Cjxmb250LWZhY2UgZm9udC1mYW1pbHk9ImZvcm0tYnVpbGRlci1mb250IiBmb250LXdlaWdodD0iNDAwIiBmb250LXN0cmV0Y2g9Im5vcm1hbCIgdW5pdHMtcGVyLWVtPSIxMDAwIiBhc2NlbnQ9Ijg1MCIgZGVzY2VudD0iLTE1MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjEwMDAiIC8+CjxnbHlwaCBnbHlwaC1uYW1lPSJhdXRvY29tcGxldGUiIHVuaWNvZGU9IiYjeGU4MDA7IiBkPSJNMzc1IDUzOGg2M3YtNjNoLTYzdjYzeiBtLTEyNSA2MmgtNjJ2LTYyaDYydjYyeiBtMTI1IDBoLTYydi02Mmg2MnY2MnogbS0yNTAtNjJ2LTYzaDYzdjYzaC02M3ogbTYzLTEyNWg2MnY2MmgtNjJ2LTYyeiBtMTI1IDBoNjJ2NjJoLTYydi02MnogbS02MyAxMjV2LTYzaDYzdjYzaC02M3ogbS0xMjUtNTYzaDYzdjYzaC02M3YtNjN6IG0xMjUgMGg2M3Y2M2gtNjN2LTYzeiBtMTI1IDBoNjN2NjNoLTYzdi02M3ogbTE4OCA2M2gtNjN2LTYzaDYzdjYzeiBtNDM3IDU5M3YtMjUwYzAtNTAtNDQtOTMtOTQtOTNoLTMxdi0xODgtMTg4YzAtMzctMjUtNjItNjItNjJoLTc1MGMtMzggMC02MyAyNS02MyA2MnY3MTljMCA1MCA0NCA5NCA5NCA5NGgxODcgMjE5djMxIDMyaC02Mi02M3YzMSAzMWgxNTYgMTU3di0zMS0zMWgtNjMtNjJ2LTMyLTMxaDE4NyAxNTZjNTAgMCA5NC00NCA5NC05NHogbS0xODctNTMxaC0zNzUtMzc1di0xODhoNzUwdjE4OHogbS02MjUgNjN2NjJoLTYzdi02Mmg2M3ogbTEyNSAwdjYyaC02M3YtNjJoNjN6IG02MjUgNDY4YzAgMTktMTMgMzItMzIgMzJoLTM0M3YtMTU3LTE1NmgtMzItMzF2MzEgMzJoLTYydjYyaDYydjMxIDMyaC02MnY2Mmg2MnYzMSAzMmgtNDA2Yy0xOSAwLTMxLTEzLTMxLTMydi0yNTBjMC0xOCAxMi0zMSAzMS0zMWg0MDZ2LTYyaC0xMjV2LTMyLTMxaDE1NiAxNTd2MzEgMzJoLTEyNXY2MmgzNDNjMTkgMCAzMiAxMyAzMiAzMXYyNTB6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJkYXRlIiB1bmljb2RlPSImI3hlODAxOyIgZD0iTTcxLTc5aDE2MXYxNjFoLTE2MXYtMTYxeiBtMTk3IDBoMTc4djE2MWgtMTc4di0xNjF6IG0tMTk3IDE5N2gxNjF2MTc4aC0xNjF2LTE3OHogbTE5NyAwaDE3OHYxNzhoLTE3OHYtMTc4eiBtLTE5NyAyMTRoMTYxdjE2MWgtMTYxdi0xNjF6IG00MTEtNDExaDE3OXYxNjFoLTE3OXYtMTYxeiBtLTIxNCA0MTFoMTc4djE2MWgtMTc4di0xNjF6IG00MjgtNDExaDE2MXYxNjFoLTE2MXYtMTYxeiBtLTIxNCAxOTdoMTc5djE3OGgtMTc5di0xNzh6IG0tMTk2IDQ4MnYxNjFxMCA3LTYgMTJ0LTEyIDZoLTM2cS03IDAtMTItNnQtNi0xMnYtMTYxcTAtNyA2LTEzdDEyLTVoMzZxNyAwIDEyIDV0NiAxM3ogbTQxMC00ODJoMTYxdjE3OGgtMTYxdi0xNzh6IG0tMjE0IDIxNGgxNzl2MTYxaC0xNzl2LTE2MXogbTIxNCAwaDE2MXYxNjFoLTE2MXYtMTYxeiBtMTggMjY4djE2MXEwIDctNSAxMnQtMTMgNmgtMzVxLTcgMC0xMy02dC01LTEydi0xNjFxMC03IDUtMTN0MTMtNWgzNXE4IDAgMTMgNXQ1IDEzeiBtMjE1IDM2di03MTVxMC0yOS0yMi01MHQtNTAtMjFoLTc4NnEtMjkgMC01MCAyMXQtMjEgNTB2NzE1cTAgMjkgMjEgNTB0NTAgMjFoNzJ2NTRxMCAzNyAyNiA2M3Q2MyAyNmgzNnEzNyAwIDYzLTI2dDI2LTYzdi01NGgyMTR2NTRxMCAzNyAyNyA2M3Q2MyAyNmgzNXEzNyAwIDY0LTI2dDI2LTYzdi01NGg3MXEyOSAwIDUwLTIxdDIyLTUweiIgaG9yaXotYWR2LXg9IjkyOC42IiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImNoZWNrYm94IiB1bmljb2RlPSImI3hlODAyOyIgZD0iTTg0NCA1Mzh2LTUwMGMwLTUxLTQ0LTk0LTk0LTk0aC01NjJjLTUwIDAtOTQgNDMtOTQgOTR2NTYyYzAgNTAgNDQgOTQgOTQgOTRoNTYyYzQ0IDAgODEtMzEgOTQtNzVsMTUwIDg3LTE1MC0xNjh6IG0tNjMtNzVsLTMwMC0zNjMtMzA2IDQwNiAzMDYtMTAwIDMwMCAxODJ2MTJjMCAxOS0xMiAzMS0zMSAzMWgtNTYyYy0xOSAwLTMyLTEyLTMyLTMxdi01NjJjMC0xOSAxMy0zMiAzMi0zMmg1NjJjMTkgMCAzMSAxMyAzMSAzMnY0MjV6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJjaGVja2JveC1ncm91cCIgdW5pY29kZT0iJiN4ZTgwMzsiIGQ9Ik0wIDc4OGgxMDAwdjYyaC0xMDAwdi02MnogbTAtMTI1aDEwMDB2NjJoLTEwMDB2LTYyeiBtMzc1LTEyNXYtNjNoNTYzdjYzaC01NjN6IG01NjMtNTYzdjYzaC01NjN2LTYzaDU2M3ogbS01NjMgMjUwaDU2M3Y2M2gtNTYzdi02M3ogbS0xMjUtMTI1bC0xNTYtOTQtOTQgMzIgOTQtMTI2IDE1NiAxODh6IG0wIDI1MGwtMTU2LTk0LTk0IDMyIDk0LTEyNSAxNTYgMTg3eiBtMCAyNTBsLTE1Ni05NC05NCAzMiA5NC0xMjUgMTU2IDE4N3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InJhZGlvLWdyb3VwIiB1bmljb2RlPSImI3hlODA0OyIgZD0iTTAgNzg4aDEwMDB2NjJoLTEwMDB2LTYyeiBtMC0xMjVoMTAwMHY2MmgtMTAwMHYtNjJ6IG0zMTMtMTg4aDYyNXY2M2gtNjI1di02M3ogbTYyNS0xODdoLTYyNXYtNjNoNjI1djYzeiBtMC0zMTN2NjNoLTYyNXYtNjNoNjI1eiBtLTg0NCA0MzhjLTUwIDAtOTQgNDMtOTQgOTNzNDQgOTQgOTQgOTQgOTQtNDQgOTQtOTQtNDQtOTMtOTQtOTN6IG0wIDEyNWMtMTkgMC0zMS0xMy0zMS0zMnMxMi0zMSAzMS0zMSAzMSAxMyAzMSAzMS0xMiAzMi0zMSAzMnogbTAtMzgyYy01MCAwLTk0IDQ0LTk0IDk0czQ0IDk0IDk0IDk0IDk0LTM4IDk0LTk0LTQ0LTk0LTk0LTk0eiBtMCAxMjVjLTE5IDAtMzEtMTItMzEtMzFzMTItMzEgMzEtMzEgMzEgMTkgMzEgMzEtMTIgMzEtMzEgMzF6IG0wLTM2OWMtNTAgMC05NCA0NC05NCA5NHM0NCA5NCA5NCA5NCA5NC00NCA5NC05NC00NC05NC05NC05NHogbTAgMTI2Yy0xOSAwLTMxLTEzLTMxLTMyczEyLTMxIDMxLTMxIDMxIDEyIDMxIDMxLTEyIDMyLTMxIDMyeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0icmljaC10ZXh0IiB1bmljb2RlPSImI3hlODA1OyIgZD0iTTkzOCA3ODhoLTg3NWMtMzggMC02My0yNS02My02M3YtNzUwYzAtMzggMjUtNjMgNjMtNjNoODc1YzM3IDAgNjIgMjUgNjIgNjN2NzUwYzAgMzgtMjUgNjMtNjIgNjN6IG0tODc1LTEzMmg1MHYtMThoLTUwdjE4eiBtMC0zMWg1MHYtMTloLTUwdjE5eiBtODc1LTY1MGgtODc1djU1Nmg4NzV2LTU1NnogbTAgNTY5aC04NzV2MTloODc1di0xOXogbTAgMzFoLTg3NXYxOWg1MHYtMTNoOTN2MTNoODJ2LTEzaDg3djEzaDgxdi0xM2g5NHYxM2g3NXYtMTNoOTR2MTNoODF2LTEzaDk0djEzaDQ0di0xOXogbS02NTcgNTB2LTE5aC03NXYxOWg3NXogbS03NSAxM3YxOGg4MnYtMThoLTgyeiBtMjUwLTEzdi0xOWgtODF2MTloODF6IG0tODEgMTN2MThoODF2LTE4aC04MXogbTI1MC0xM3YtMTloLTc1djE5aDc1eiBtLTc1IDEzdjE4aDc1di0xOGgtNzV6IG0yNTAtMTN2LTE5aC04MXYxOWg4MXogbS04MSAxM3YxOGg4MXYtMThoLTgxeiBtMjE5LTMyaC01MHYxOWg1MHYtMTl6IG0wIDMyaC01MHYxOGg1MHYtMTh6IG0wIDMxaC01MHY2aC05NHYtMTJoLTgxdjEyaC04OHYtMTJoLTc1djEyaC05NHYtMTJoLTgxdjEyaC05NHYtMTJoLTc1djEyaC05M3YtMTJoLTUwdjI1aDg3NXYtMTl6IG0wIDMxaC04NzV2MTloODc1di0xOXogbS03NTAtNjAwdjYzaDYyNXYtNjNoLTYyNXogbTYyNSAxMjVoLTYyNXY2M2g2MjV2LTYzeiBtLTEyNSAxMjVoLTUwMHY2M2g1MDB2LTYzeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0ic2VsZWN0IiB1bmljb2RlPSImI3hlODA2OyIgZD0iTTAgODUwdi04NzVoMGMwLTM4IDI1LTYzIDYzLTYzaDYyNWMzNyAwIDYyIDI1IDYyIDYzaDB2NTYzaDI1MHYzMTJoLTEwMDB6IG02My02Mmg2MjV2LTE4OGgtNjI1djE4OHogbTAtMzc1aDYyNXYtMTg4aC02MjV2MTg4eiBtMC00Mzh2MTg4aDYyNXYtMTg4aC02MjV6IG04NzUgNjI1aC0xODh2MTg4aDE4OHYtMTg4eiBtLTgxMyAxMjVoNjN2LTYyaC02M3Y2MnogbTAtNjI1aDYzdi02MmgtNjN2NjJ6IG0xMjUgMGg2M3YtNjJoLTYzdjYyeiBtMTI1IDBoNjN2LTYyaC02M3Y2MnogbTE4OCAwdi02MmgtNjN2NjJoNjN6IG0tNDM4IDI1MGg2M3YtNjJoLTYzdjYyeiBtMTI1IDBoNjN2LTYyaC02M3Y2MnogbTEyNSAwaDYzdi02MmgtNjN2NjJ6IG00NjkgMzA2bC02MyA2OWgxMTlsLTU2LTY5eiBtLTcxOS0xODF2NjNoNjN2LTYzaC02M2wwIDB6IG0xMjUgMHY2M2g2M3YtNjNoLTYzbDAgMHoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InRleHRhcmVhIiB1bmljb2RlPSImI3hlODA3OyIgZD0iTTE4OCAxNjN2NjJoNTAwdi02MmgtNTAwbDAgMHogbTAgMjUwaDYyNXY2MmgtNjI1di02MmwwIDB6IG0wLTYzdi02Mmg2MjV2NjJoLTYyNWwwIDB6IG02MjUgMjUwaC02MjV2LTYyaDYyNXY2MmwwIDB6IG0xODctNjI1djc1MGMwIDM4LTI1IDYzLTYyIDYzaC04NzVjLTM4IDAtNjMtMjUtNjMtNjN2LTc1MGMwLTM4IDI1LTYzIDYzLTYzaDg3NWMzNyAwIDYyIDI1IDYyIDYzeiBtLTYyIDc1MHYtNzUwaC04NzV2NzUwaDg3NXoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InRleHQiIHVuaWNvZGU9IiYjeGU4MDg7IiBkPSJNOTM4IDYwMGgtNjU3djYzaDk0djYyaC05NC02Mi05NHYtNjJoOTR2LTYzaC0xNTZjLTM4IDAtNjMtMzEtNjMtNjJ2LTM3NWMwLTM4IDI1LTYzIDYzLTYzaDE1NnYtNjJoLTk0di02M2gyNTB2NjNoLTk0djYyaDY1N2MzNyAwIDYyIDI1IDYyIDYzdjM3NWMwIDMxLTI1IDYyLTYyIDYyeiBtLTg3NS00Mzd2Mzc1aDE1NnYtMzc1aC0xNTZ6IG04NzUgMGgtNjU3djM3NWg2NTd2LTM3NXoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InBlbmNpbCIgdW5pY29kZT0iJiN4ZTgwOTsiIGQ9Ik0yMDMtN2w1MCA1MS0xMzEgMTMxLTUxLTUxdi02MGg3MnYtNzFoNjB6IG0yOTEgNTE4cTAgMTItMTIgMTItNSAwLTktNGwtMzAzLTMwMnEtNC00LTQtMTAgMC0xMiAxMy0xMiA1IDAgOSA0bDMwMyAzMDJxMyA0IDMgMTB6IG0tMzAgMTA3bDIzMi0yMzItNDY0LTQ2NWgtMjMydjIzM3ogbTM4MS01NHEwLTI5LTIwLTUwbC05My05My0yMzIgMjMzIDkzIDkycTIwIDIxIDUwIDIxIDI5IDAgNTEtMjFsMTMxLTEzMXEyMC0yMiAyMC01MXoiIGhvcml6LWFkdi14PSI4NTcuMSIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJmaWxlIiB1bmljb2RlPSImI3hlODBhOyIgZD0iTTQ2OSAxNjNoLTQ2OXYtMjUxaDkzOHYyNTFoLTQ2OXogbTQwNi0xMjVoLTEyNXY2MmgxMjV2LTYyeiBtLTY1NiA1MDBsMjUwIDI1MCAyNTAtMjUwaC0xNTZ2LTMxM2gtMTg4djMxM3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImhpZGRlbiIgdW5pY29kZT0iJiN4ZTgwYjsiIGQ9Ik02MyA1MzhsNjIgMCAwIDYyLTYyIDB6IG0xMjUgMGw2MiAwIDAgNjItNjIgMHogbTEyNSAwbDYyIDAgMCA2Mi02MiAweiBtMTI1IDBsNjIgMCAwIDYyLTYyIDB6IG0xMjUgMGw2MiAwIDAgNjItNjIgMHogbTEyNSAwbDYyIDAgMCA2Mi02MiAweiBtMTI1IDBsNjIgMCAwIDYyLTYyIDB6IG0tODEzLTYzbDYzIDAgMCA2My02MyAweiBtOTM4LTYybDYyIDAgMCA2Mi02MiAweiBtLTkzOC02M2w2MyAwIDAgNjMtNjMgMHogbTkzOC02Mmw2MiAwIDAgNjItNjIgMHogbS05MzgtNjNsNjMgMCAwIDYzLTYzIDB6IG05MzgtNjJsNjIgMCAwIDYyLTYyIDB6IG0tODEzLTYzbDYzIDAgMCA2My02MyAweiBtMTI1IDBsNjMgMCAwIDYzLTYzIDB6IG0xMjUgMGw2MyAwIDAgNjMtNjMgMHogbTEyNSAwbDYzIDAgMCA2My02MyAweiBtMTI1IDBsNjMgMCAwIDYzLTYzIDB6IG0xMjUgMGw2MyAwIDAgNjMtNjMgMHogbTEyNSAwbDYzIDAgMCA2My02MyAweiBtNjMgNDM4bDYyIDAgMCA2Mi02MiAweiBtLTkzOC00MzhsNjMgMCAwIDYzLTYzIDB6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJidXR0b24iIHVuaWNvZGU9IiYjeGU4MGQ7IiBkPSJNNjIgNTM4bDg3NSAwIDAgNjItODc1IDB6IG0tNjItMzc1bDYzIDAgMCAzNzUtNjMgMHogbTYzLTYzbDg3NSAwIDAgNjMtODc1IDB6IG04NzUgNjNsNjIgMCAwIDM3NS02MiAweiBtLTU1MiAyODBxLTM0IDAtNTQtMjUtMTktMjUtMTktNjggMC00MyAxOS02OCAyMC0yNSA1NC0yNSAzMyAwIDUzIDI1IDE5IDI1IDE5IDY4IDAgNDMtMTkgNjgtMjAgMjUtNTMgMjV6IG0wIDI1cTQ4IDAgNzYtMzIgMjktMzIgMjktODYgMC01NC0yOS04Ni0yOC0zMi03Ni0zMi00OCAwLTc3IDMyLTI5IDMyLTI5IDg2IDAgNTQgMjkgODYgMjkgMzIgNzcgMzJ6IG0xNTMtNGwzMSAwIDAtOTYgMTAyIDk2IDQwIDAtMTEzLTEwNiAxMjEtMTIyLTQxIDAtMTA5IDExMCAwLTExMC0zMSAwIDAgMjI4eiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0iaGVhZGVyIiB1bmljb2RlPSImI3hlODBmOyIgZD0iTTkzOS03OXEtMjUgMC03NCAydC03NSAycS0yNCAwLTczLTJ0LTc0LTJxLTEzIDAtMjEgMTJ0LTcgMjVxMCAxOCA5IDI2dDIyIDkgMjkgNCAyNSA5cTE4IDExIDE4IDc4bDAgMjE4cTAgMTItMSAxNy03IDMtMjggM2gtMzc2cS0yMiAwLTI5LTMgMC01IDAtMTdsLTEtMjA3cTAtNzkgMjEtOTEgOS02IDI2LTh0MzItMiAyNS04IDExLTI2cTAtMTQtNi0yNnQtMjEtMTNxLTI2IDAtNzggMnQtNzcgMnEtMjQgMC03MS0ydC03MS0ycS0xMyAwLTIwIDEydC03IDI1cTAgMTcgOSAyNXQyMCAxMCAyNiA0IDI0IDlxMTggMTMgMTggODBsLTEgMzF2NDU0cTAgMiAxIDE1dDAgMjAtMSAyMS0yIDI0LTQgMjAtNiAxOC05IDEwcS04IDUtMjUgN3QtMjkgMS0yMyA3LTEwIDI2cTAgMTQgNiAyNnQyMCAxM3EyNiAwIDc4LTJ0NzctMnEyMyAwIDcxIDJ0NzAgMnExNCAwIDIxLTEzdDctMjZxMC0xNy05LTI1dC0yMi04LTI3LTItMjQtN3EtMjAtMTItMjAtOTBsMS0xNzhxMC0xMiAwLTE4IDctMiAyMi0yaDM5MHExNCAwIDIxIDIgMSA2IDEgMThsMCAxNzhxMCA3OC0xOSA5MC0xMCA2LTMzIDd0LTM3IDctMTQgMjhxMCAxNCA3IDI2dDIxIDEzcTI0IDAgNzQtMnQ3My0ycTI0IDAgNzIgMnQ3MiAycTE0IDAgMjEtMTN0Ny0yNnEwLTE3LTEwLTI1dC0yMi04LTI5LTItMjQtN3EtMjAtMTMtMjAtOTBsMS01MjZxMC02NiAxOS03OCA5LTYgMjUtOHQzMC0yIDIzLTkgMTAtMjVxMC0xNC02LTI2dC0yMC0xM3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InBhcmFncmFwaCIgdW5pY29kZT0iJiN4ZTgxMDsiIGQ9Ik03MTMgNzQ1di00MXEwLTE2LTEwLTM0dC0yNC0xOHEtMjggMC0zMC0xLTE0LTMtMTgtMTctMS02LTEtMzZ2LTY0M3EwLTE0LTExLTI0dC0yNC0xMGgtNjBxLTE0IDAtMjQgMTB0LTEwIDI0djY4MGgtODB2LTY4MHEwLTE0LTktMjR0LTI1LTEwaC02MHEtMTQgMC0yNCAxMHQtMTAgMjR2Mjc3cS04MiA3LTEzNyAzMy03MCAzMy0xMDcgMTAwLTM2IDY1LTM2IDE0NSAwIDkyIDUwIDE1OSA0OSA2NiAxMTYgODkgNjIgMjEgMjMzIDIxaDI2N3ExNCAwIDI0LTEwdDEwLTI0eiIgaG9yaXotYWR2LXg9IjcxNC4zIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9Im51bWJlciIgdW5pY29kZT0iJiN4ZTgxMTsiIGQ9Ik04NzUgNDc1djEyNWgtMTU2bDMxIDI1MGgtMTI1bC0zMS0yNTBoLTI1MGwzMSAyNTBoLTEyNWwtMzEtMjUwaC0yMTl2LTEyNWgyMDNsLTMxLTI1MGgtMTcydi0xMjVoMTU2bC0zMS0yNTBoMTI1bDMxIDI1MGgyNTBsLTMxLTI1MGgxMjVsMzEgMjUwaDIxOXYxMjVoLTIwM2wzMSAyNTBoMTcyeiBtLTMyOC0yNTBoLTI1MGwzMSAyNTBoMjUwbC0zMS0yNTB6IiBob3Jpei1hZHYteD0iODc1IiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImNvcHkiIHVuaWNvZGU9IiYjeGYyNGQ7IiBkPSJNOTI5LTYxdjYwN3EwIDgtNiAxM3QtMTIgNWgtNjA3cS04IDAtMTMtNXQtNS0xM3YtNjA3cTAtNyA1LTEydDEzLTZoNjA3cTcgMCAxMiA2dDYgMTJ6IG03MSA2MDd2LTYwN3EwLTM3LTI2LTYzdC02My0yNmgtNjA3cS0zNyAwLTYzIDI2dC0yNyA2M3Y2MDdxMCAzNyAyNyA2NHQ2MyAyNmg2MDdxMzcgMCA2My0yNnQyNi02NHogbS0yMTQgMjE1di05MGgtNzJ2OTBxMCA3LTUgMTJ0LTEzIDZoLTYwN3EtNyAwLTEyLTZ0LTYtMTJ2LTYwN3EwLTggNi0xM3QxMi01aDkwdi03MmgtOTBxLTM2IDAtNjMgMjd0LTI2IDYzdjYwN3EwIDM3IDI2IDYzdDYzIDI2aDYwN3EzNyAwIDY0LTI2dDI2LTYzeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+CjwvZm9udD4KPC9kZWZzPgo8L3N2Zz4=) format("svg");font-weight:400;font-style:normal}[class*=" icon-"]:before,[class^=icon-]:before{font-family:form-builder-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-autocomplete:before{content:'\e800'}.icon-date:before{content:'\e801'}.icon-checkbox:before{content:'\e802'}.icon-checkbox-group:before{content:'\e803'}.icon-radio-group:before{content:'\e804'}.icon-rich-text:before{content:'\e805'}.icon-select:before{content:'\e806'}.icon-textarea:before{content:'\e807'}.icon-text:before{content:'\e808'}.icon-pencil:before{content:'\e809'}.icon-file:before{content:'\e80a'}.icon-hidden:before{content:'\e80b'}.icon-button:before{content:'\e80d'}.icon-header:before{content:'\e80f'}.icon-paragraph:before{content:'\e810'}.icon-number:before{content:'\e811'}.icon-copy:before{content:'\f24d'}*{box-sizing:border-box}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.btn,.frmb .prev-holder label,.frmb .sortable-options-wrap label,.frmb li.disabled-field label,.frmb li.no-fields label{font-weight:400}textarea{overflow:auto}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}.btn-group{position:relative}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-group .input-group .form-control:last-child,.btn-group .input-group-addon:last-child,.btn-group .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.btn-group .input-group-btn:first-child>.btn:not(:first-child),.btn-group .input-group-btn:last-child>.btn,.btn-group .input-group-btn:last-child>.btn-group>.btn,.btn-group .input-group-btn:last-child>.dropdown-toggle,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn{padding:6px 12px;margin-bottom:0;font-size:14px;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:4px}.btn.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn.btn-sm,.btn.btn-xs{font-size:12px;line-height:1.5;border-radius:3px}.btn.btn-sm{padding:5px 10px}.btn.btn-xs{padding:1px 5px}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.input-group{position:relative;display:table;border-collapse:separate}.form-control,output{display:block;font-size:14px;line-height:1.42857143}.input-group .form-control{z-index:2;width:100%;margin-bottom:0}textarea.form-control{height:auto}.form-control{height:34px;width:100%;padding:6px 12px;border-radius:4px}.form-control:focus{outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-group{margin-left:0;margin-bottom:15px}.pull-right{float:right}.pull-left{float:left}.fb-required,.required-asterisk{color:#c10000}.fb-checkbox-inline,.fb-radio-inline{display:inline-block;padding-left:20px;vertical-align:middle}.fb-checkbox-inline:first-child,.fb-radio-inline:first-child{padding-left:0}.fb-autocomplete-list{background-color:#fff;display:none;list-style:none;padding:0;border:1px solid #ccc;border-width:0 1px 1px;position:absolute;z-index:20;max-height:200px;overflow-y:auto}.fb-autocomplete-list li{display:none;cursor:default;padding:5px;margin:0;-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.fb-autocomplete-list li.active-option,.fb-autocomplete-list li:hover{background-color:rgba(0,0,0,.075)}@-webkit-keyframes PLACEHOLDER{0%{height:1px}100%{height:15px}}@keyframes PLACEHOLDER{0%{height:1px}100%{height:15px}}.cb-wrap{float:right;width:26%;-webkit-transition:-webkit-transform 250ms;transition:-webkit-transform 250ms;transition:transform 250ms;transition:transform 250ms,-webkit-transform 250ms}.cb-wrap.pull-left .form-actions{float:left}.cb-wrap h4{margin-top:0;color:#666}.cb-wrap .save:hover{color:#08fe00}@media (max-width:481px){.cb-wrap{width:64px}.cb-wrap h4{display:none}}.frmb-control{margin:0;padding:1px;border-radius:5px}.frmb-control li{cursor:move;list-style:none;margin:0 0 -1px;padding:10px;text-align:left;background:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;box-shadow:inset 0 0 0 1px #c5c5c5}.frmb-control li .control-icon{width:16px;height:auto;margin-right:10px;margin-left:.2em;display:inline-block}.frmb-control li .control-icon img,.frmb-control li .control-icon svg{max-width:100%;height:auto}.frmb-control li:first-child{border-radius:5px 5px 0 0;margin-top:0}.frmb-control li:last-child{border-radius:0 0 5px 5px}.frmb-control li::before{margin-right:10px;font-size:16px}.frmb-control li:hover{background-color:#f2f2f2}.frmb-control li.ui-sortable-helper{border-radius:5px;-webkit-transition:box-shadow 250ms;transition:box-shadow 250ms;box-shadow:2px 2px 6px 0 #666;border:1px solid #fff}.frmb-control li.ui-state-highlight{width:0;overflow:hidden;padding:0;margin:0;border:0}.frmb-control li.moving{opacity:.6}.frmb-control li.fb-separator{background-color:transparent;box-shadow:none;padding:0;cursor:default}.frmb-control li.fb-separator hr{margin:10px 0}@media (max-width:481px){.frmb-control li::before{font-size:30px}.frmb-control li span{display:none}}.frmb-control.sort-enabled li.ui-state-highlight{box-shadow:none;height:0;width:100%;background:-webkit-radial-gradient(center ellipse,#545454 0,transparent 75%);background:radial-gradient(ellipse at center,#545454 0,transparent 75%);border:0;-webkit-clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);visibility:visible;overflow:hidden;margin:1px 0 3px;-webkit-animation:PLACEHOLDER 250ms forwards;animation:PLACEHOLDER 250ms forwards}.frmb-control .input-set-0{border-radius:5px 5px 0 0}.fb-mobile .form-actions{width:100%}.fb-mobile .form-actions button{width:100%;font-size:.85em!important;display:block!important;border-radius:0!important;margin-top:-1px;margin-left:0!important}.fb-mobile .form-actions button:first-child{border-radius:5px 5px 0 0!important;margin-top:0!important;border-bottom:0 none}.fb-mobile .form-actions button:last-child{border-radius:0 0 5px 5px!important}.form-actions{float:right;margin-top:5px}.form-actions button{border:0}.empty .frmb{border:3px dashed #ccc;margin-right:5px;background-color:rgba(255,255,255,.25)}.stage-wrap{position:relative;float:left;width:74%}.stage-wrap.pull-right .frmb{margin:0 0 0 6px}@media (max-width:481px){.stage-wrap{width:calc(100% - 64px)}}.stage-wrap.empty::after{content:attr(data-content);position:absolute;text-align:center;top:50%;left:0;width:100%;margin-top:-1em}.frmb .prev-holder input[type=number],.frmb .prev-holder input[type=date]{width:auto}.frmb{list-style-type:none;min-height:200px;margin:0 6px 0 0;padding:0;-webkit-transition:background-color .5s ease-in-out;transition:background-color .5s ease-in-out}.frmb .fb-required{color:#c10000}.frmb.removing{overflow:hidden}.frmb>li:hover{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 0 8px rgba(102,175,233,.6)}.frmb>li:hover .field-actions{opacity:1}.frmb>li:hover li :hover{background:#fefefe}.frmb li{position:relative;padding:6px;clear:both;margin-left:0;margin-bottom:3px;background-color:#fff;-webkit-transition:background-color 250ms ease-in-out,margin-top .4s;transition:background-color 250ms ease-in-out,margin-top .4s}.frmb li.hidden-field{background-color:rgba(255,255,255,.6)}.frmb li:first-child{border-top-right-radius:5px;border-top-left-radius:5px}.frmb li:first-child .field-actions .btn:last-child{border-radius:0 5px 0 0}.frmb li:last-child{border-bottom-right-radius:5px;border-bottom-left-radius:5px}@keyframes PLACEHOLDER{0%{height:0}100%{height:15px}}.frmb li.frmb-placeholder,.frmb li.ui-state-highlight{height:0;padding:0;background:-webkit-radial-gradient(center ellipse,#545454 0,transparent 75%);background:radial-gradient(ellipse at center,#545454 0,transparent 75%);border:0;-webkit-clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);visibility:visible;overflow:hidden;margin-bottom:3px;-webkit-animation:PLACEHOLDER 250ms forwards;animation:PLACEHOLDER 250ms forwards}.frmb li.moving,.frmb li.ui-sortable-helper{-webkit-transition:box-shadow .5s ease-in-out;transition:box-shadow .5s ease-in-out;box-shadow:2px 2px 6px 0 #666;border:1px solid #fff;border-radius:5px}.frmb li.disabled-field{z-index:1;position:relative;overflow:visible}.frmb li.deleting,.frmb-tt{z-index:20;pointer-events:none}.frmb li.disabled-field:hover .frmb-tt{display:inline-block}.frmb li.disabled-field [type=checkbox]{float:left;margin-right:10px}.frmb li.disabled-field h2{border-bottom:0 none}.frmb li.disabled-field label{font-size:12px;color:#666}.frmb li.disabled-field .prev-holder{cursor:default;line-height:28px;padding-left:5px}.frmb li .close-field{position:absolute;color:#666;left:50%;bottom:6px;background:#fff;border-top:1px solid #c5c5c5;border-left:1px solid #c5c5c5;border-right:1px solid #c5c5c5;-webkit-transform:translateX(-50%);transform:translateX(-50%);padding:0 5px;border-top-right-radius:3px;border-top-left-radius:3px;cursor:pointer;-webkit-transition:background-color 250ms ease-in-out;transition:background-color 250ms ease-in-out}.frmb li .close-field:hover{text-decoration:none}.frmb li.button-field .prev-holder,.frmb li.button-field address,.frmb li.button-field blockquote,.frmb li.button-field canvas,.frmb li.button-field h1,.frmb li.button-field h2,.frmb li.button-field h3,.frmb li.button-field output,.frmb li.button-field p,.frmb li.header-field .prev-holder,.frmb li.header-field address,.frmb li.header-field blockquote,.frmb li.header-field canvas,.frmb li.header-field h1,.frmb li.header-field h2,.frmb li.header-field h3,.frmb li.header-field output,.frmb li.header-field p,.frmb li.paragraph-field .prev-holder,.frmb li.paragraph-field address,.frmb li.paragraph-field blockquote,.frmb li.paragraph-field canvas,.frmb li.paragraph-field h1,.frmb li.paragraph-field h2,.frmb li.paragraph-field h3,.frmb li.paragraph-field output,.frmb li.paragraph-field p{margin:0}.frmb li.button-field .field-label,.frmb li.header-field .field-label,.frmb li.paragraph-field .field-label{display:none}.frmb li.button-field.editing .field-label,.frmb li.header-field.editing .field-label,.frmb li.paragraph-field.editing .field-label{display:block}.frmb .frm-holder,.frmb li.checkbox-field .field-label{display:none}.frmb li.paragraph-field .fld-label{min-height:150px}.frmb li.delete:hover,.frmb li.delete:hover .close-field,.frmb li.deleting,.frmb li.deleting .close-field,.frmb li:hover li.delete:hover,.frmb li:hover li.delete:hover .close-field{background-color:#fdd}.frmb.disabled-field{padding:0 5px}.frmb.disabled-field :hover{border-color:transparent}.frmb.disabled-field .form-element{float:none;margin-bottom:10px;overflow:visible;padding:5px 0;position:relative}.frmb .tooltip{left:20px}.frmb .prev-holder{display:block}.frmb .prev-holder .form-group{margin-bottom:0}.frmb .prev-holder .ql-editor{min-height:125px}.frmb .prev-holder .form-group>label:not([class=fb-checkbox-label]){display:none}.frmb .prev-holder input[type=text],.frmb .prev-holder input[type=number],.frmb .prev-holder select,.frmb .prev-holder textarea{background-color:#fff;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.frmb .prev-holder select[multiple]{height:auto}.frmb .prev-holder input[type=checkbox],.frmb .prev-holder input[type=radio]{display:inline-block}.frmb .prev-holder input[type=color]{width:60px;padding:2px;display:inline-block}.frmb .required-asterisk{display:none}.frmb .field-label,.frmb .legend{color:#666;margin-bottom:5px;line-height:27px;font-size:16px;font-weight:400}.frmb .disabled-field .field-label{display:block}.frmb .other-val{margin-left:5px;display:none}.frmb .field-actions{position:absolute;top:0;right:0;opacity:0}.frmb .field-actions a:hover{text-decoration:none;color:#000}.frmb .field-actions .btn{display:inline-block;height:32px;padding:0 6px;border-radius:0;border-color:#c5c5c5;background-color:#fff;color:#c5c5c5;line-height:32px;font-size:16px;border-width:0 0 1px 1px}.frmb .field-actions .btn:first-child{border-bottom-left-radius:5px}.frmb .field-actions .toggle-form:hover{background-color:#65aac6;color:#fff}.frmb .field-actions .copy-button{font-size:14px}.frmb .field-actions .copy-button:hover{background-color:#6fc665;color:#fff}.frmb .field-actions .del-button{font-size:20px;line-height:30px}.frmb .field-actions .del-button:hover{background-color:#c66865;color:#fff}.frmb .option-actions{text-align:right;margin-top:10px;width:100%;margin-left:2%}.frmb .option-actions a,.frmb .option-actions button{background:#fff;padding:5px 10px;border:1px solid #c5c5c5;font-size:14px;border-radius:5px;cursor:default}.frmb .sortable-options-wrap{width:81.33333333%;display:inline-block}@media (max-width:481px){.frmb .sortable-options-wrap{display:block;width:100%}}.frmb .sortable-options{display:inline-block;width:100%;margin-left:2%;background:#c5c5c5;margin-bottom:0;border-radius:5px;list-style:none;padding:0}.frmb .sortable-options>li{cursor:move;margin:1px}.tooltip-element,[tooltip]:hover:after{cursor:default;font-size:12px;color:#fff}.frmb .sortable-options>li:nth-child(1) .remove,.radio-group-field .frmb .sortable-options>li:nth-child(2) .remove{display:none}.frmb .sortable-options>li .remove{position:absolute;opacity:1;right:14px;height:17px;width:17px;line-height:17px;text-align:center;top:14px;font-size:18px;padding:0;color:#c10000}.frmb .sortable-options>li .remove:hover{background-color:#c10000;text-decoration:none;color:#fff}.frmb .sortable-options .option-selected{margin:0;width:5%}.frmb .sortable-options input[type=text]{width:calc(44.5% - 17px);margin:0 1%;float:none}.frmb .form-field .form-group{width:100%;clear:left;float:none}.frmb .col-md-6 .form-elements,.frmb .col-md-8 .form-elements{width:100%}.frmb .field-options .add-area .add{clear:both}.frmb .style-wrap button.selected{border:1px solid #000;margin-top:0;margin-right:1px;box-shadow:0 0 0 1px #fff inset;padding:1px 5px}.frmb .form-elements{padding:10px 5px;background:#f7f7f7;border-radius:3px;margin:0;border:1px solid #c5c5c5}.frmb .form-elements .input-wrap{width:81.33333333%;margin-left:2%;float:left}.frmb .form-elements .input-wrap>input[type=checkbox]{margin-top:8px}.frmb .form-elements .add{clear:both}.frmb .form-elements input[type=text],.frmb .form-elements input[type=number],.frmb .form-elements input[type=color],.frmb .form-elements input[type=date],.frmb .form-elements select,.frmb .form-elements textarea{-webkit-transition:background 250ms ease-in-out;transition:background 250ms ease-in-out;padding:6px 12px;border:1px solid #c5c5c5;background-color:#fff}@media (max-width:481px){.frmb .form-elements .input-wrap{width:100%;margin-left:0;float:none}}.frmb .form-elements input[type=number]{width:auto}.frmb .form-elements .btn-group{margin-left:2%}.col-md-6 .frmb .form-elements .false-label,.col-md-6 .frmb .form-elements label,.col-md-8 .frmb .form-elements .false-label,.col-md-8 .frmb .form-elements label{display:block}.frmb .form-elements .false-label:first-child,.frmb .form-elements label:first-child{width:16.66666667%;padding-top:7px;margin-bottom:0;text-align:right;font-weight:700;float:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:capitalize}@media (max-width:481px){.frmb .form-elements .false-label:first-child,.frmb .form-elements label:first-child{display:block;width:auto;float:none;text-align:left}.frmb .form-elements .false-label:first-child.empty-label,.frmb .form-elements label:first-child.empty-label{display:none}}.frmb .form-elements .false-label.multiple,.frmb .form-elements .false-label.other-label,.frmb .form-elements .false-label.required-label,.frmb .form-elements .false-label.roles-label,.frmb .form-elements .false-label.toggle-label,.frmb .form-elements label.multiple,.frmb .form-elements label.other-label,.frmb .form-elements label.required-label,.frmb .form-elements label.roles-label,.frmb .form-elements label.toggle-label{text-align:left;float:none;margin-bottom:-3px;font-weight:400;width:calc(81.3333% - 23px)}.autocomplete-field .sortable-options .option-selected{display:none}.fb-mobile .field-actions{opacity:1}[tooltip]{position:relative}[tooltip]:hover:after{background:rgba(0,0,0,.9);border-radius:5px 5px 5px 0;bottom:23px;content:attr(tooltip);padding:10px 5px;position:absolute;z-index:98;left:2px;width:230px;text-shadow:none;line-height:1.5em}.form-wrap::after,.kc-toggle span::after,.kc-toggle span::before,[tooltip]:hover:before{content:''}[tooltip]:hover:before{border:solid;border-color:#222 transparent;border-width:6px 6px 0;bottom:17px;left:2px;position:absolute;z-index:99;cursor:default}.tooltip-element{visibility:visible;background:#000;width:16px;height:16px;border-radius:8px;display:inline-block;text-align:center;line-height:16px;margin:0 5px}.kc-toggle{padding-left:0!important}.kc-toggle span{position:relative;width:48px;height:24px;background:#e6e6e6;display:inline-block;border-radius:4px;border:1px solid #ccc;padding:2px;overflow:hidden;float:left;margin-right:5px}.kc-toggle span::after,.kc-toggle span::before{position:absolute;display:inline-block;top:0}.kc-toggle span::after{position:relative;width:50%;height:100%;left:0;border-radius:3px;background:-webkit-linear-gradient(top,#fff 0,#ccc 100%);background:linear-gradient(to bottom,#fff 0,#ccc 100%);border:1px solid #999;-webkit-transition:-webkit-transform 50ms;transition:-webkit-transform 50ms;transition:transform 50ms;transition:transform 50ms,-webkit-transform 50ms;-webkit-transform:translateX(0);transform:translateX(0)}.kc-toggle span::before{border-radius:4px;top:2px;left:2px;width:calc(100% - 4px);height:18px;box-shadow:0 0 1px 1px #b3b3b3 inset;background-color:transparent}.kc-toggle input{height:0;overflow:hidden;width:0;opacity:0;pointer-events:none;margin:0}.kc-toggle input:checked+span::after{-webkit-transform:translateX(100%);transform:translateX(100%)}.kc-toggle input:checked+span::before{background-color:#6fc665}.form-wrap{position:relative}.form-wrap::after{display:table;clear:both}.cb-wrap,.stage-wrap{vertical-align:top}.stage-wrap h4{margin-top:0;color:#666}.form-elements input.error{border:1px solid #c10000}.form-elements input.fld-maxlength{width:10%}.form-elements input.field-error{background:#fefefe;border:1px solid #c5c5c5}.form-elements label em{display:block;font-weight:400;font-size:.75em}.form-elements label.maxlength-label{line-height:1em}.form-elements .available-roles{display:none;padding:10px;margin:10px 0;background:#e6e6e6;box-shadow:inset 0 0 2px 0 #b3b3b3}@media (max-width:481px){.form-elements .available-roles{margin-left:0}}.form-elements .available-roles label{font-weight:400;width:auto;float:none;display:inline}.form-elements .available-roles input{display:inline;top:auto}.form-elements,.form-group,.multi-row span,textarea{display:block}.form-elements::after,.form-group::after{content:'.';display:block;height:0;clear:both;visibility:hidden}.form-elements .field-options div:hover,.frmb .legend,.frmb .prev-holder{cursor:move}.frmb-tt{display:none;position:absolute;top:0;left:0;border:1px solid #262626;background-color:#666;border-radius:5px;padding:5px;color:#fff;text-align:left;font-size:12px}.frmb-tt::after,.frmb-tt::before{content:'';position:absolute;border-style:solid;border-width:10px 10px 0;border-color:#666 transparent;display:block;width:0;z-index:1;margin-left:-10px;bottom:-10px;left:20px}.frmb-tt a{text-decoration:underline;color:#fff}.fb-mobile .frmb li .del-button,.fb-mobile .frmb li .toggle-form,.frmb li:hover .del-button,.frmb li:hover .toggle-form{opacity:1}.fresh .frmb .legend .element-info{display:inline-block;visibility:visible;line-height:12px;margin-left:6px}.frmb-xml .ui-dialog-content{white-space:pre-wrap;word-wrap:break-word;font-size:12px;padding:0 30px;margin-top:0}.toggle-form{margin-left:5px;opacity:0}.toggle-form:hover{border-color:#ccc}.toggle-form::before{margin:0}.formb-field-vars .copy-var{display:inline-block;width:24px;height:24px;background:#b3b3b3;text-indent:-9999px}.ui-button .ui-button-text{line-height:0}.form-builder-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);display:none;z-index:10}.form-builder-overlay.visible{display:block}.form-builder-dialog{position:absolute;border-radius:5px;background:#fff;z-index:20;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);top:0;left:0;padding:10px;box-shadow:0 3px 10px #000;min-width:166px}.form-builder-dialog h3{margin-top:0}.form-builder-dialog.data-dialog{width:65%;background-color:#23241f}.form-builder-dialog.data-dialog pre{background:0 0;border:0;box-shadow:none;margin:0;color:#f2f2f2}.form-builder-dialog.positioned{-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.form-builder-dialog.positioned .button-wrap::before{content:'';width:0;height:0;border-left:15px solid transparent;border-right:15px solid transparent;border-top:10px solid #fff;position:absolute;left:50%;top:100%;-webkit-transform:translate(-50%,10px);transform:translate(-50%,10px)}.form-builder-dialog .button-wrap{position:relative;margin-top:10px;text-align:right;clear:both}.form-builder-dialog .button-wrap .btn{margin-left:10px} \ No newline at end of file +@charset "UTF-8";.btn,.btn-group{display:inline-block}.btn-group>.btn,.input-group .form-control{position:relative;float:left}.btn,.btn.active,.btn.btn-active,.btn:active,.form-control{background-image:none}.btn,.btn-group{vertical-align:middle}@font-face{font-family:form-builder-font;src:url(data:application/vnd.ms-fontobject;base64,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YyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=);src:url(data:application/vnd.ms-fontobject;base64,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YyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=) format("embedded-opentype"),url(data:application/octet-stream;base64,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) format("woff2"),url(data:application/font-woff;base64,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) format("woff"),url(data:application/x-font-ttf;base64,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BCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=) format("truetype"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtZXRhZGF0YT5Db3B5cmlnaHQgKEMpIDIwMTcgYnkgb3JpZ2luYWwgYXV0aG9ycyBAIGZvbnRlbGxvLmNvbTwvbWV0YWRhdGE+CjxkZWZzPgo8Zm9udCBpZD0iZm9ybS1idWlsZGVyLWZvbnQiIGhvcml6LWFkdi14PSIxMDAwIiA+Cjxmb250LWZhY2UgZm9udC1mYW1pbHk9ImZvcm0tYnVpbGRlci1mb250IiBmb250LXdlaWdodD0iNDAwIiBmb250LXN0cmV0Y2g9Im5vcm1hbCIgdW5pdHMtcGVyLWVtPSIxMDAwIiBhc2NlbnQ9Ijg1MCIgZGVzY2VudD0iLTE1MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjEwMDAiIC8+CjxnbHlwaCBnbHlwaC1uYW1lPSJhdXRvY29tcGxldGUiIHVuaWNvZGU9IiYjeGU4MDA7IiBkPSJNMzc1IDUzOGg2M3YtNjNoLTYzdjYzeiBtLTEyNSA2MmgtNjJ2LTYyaDYydjYyeiBtMTI1IDBoLTYydi02Mmg2MnY2MnogbS0yNTAtNjJ2LTYzaDYzdjYzaC02M3ogbTYzLTEyNWg2MnY2MmgtNjJ2LTYyeiBtMTI1IDBoNjJ2NjJoLTYydi02MnogbS02MyAxMjV2LTYzaDYzdjYzaC02M3ogbS0xMjUtNTYzaDYzdjYzaC02M3YtNjN6IG0xMjUgMGg2M3Y2M2gtNjN2LTYzeiBtMTI1IDBoNjN2NjNoLTYzdi02M3ogbTE4OCA2M2gtNjN2LTYzaDYzdjYzeiBtNDM3IDU5M3YtMjUwYzAtNTAtNDQtOTMtOTQtOTNoLTMxdi0xODgtMTg4YzAtMzctMjUtNjItNjItNjJoLTc1MGMtMzggMC02MyAyNS02MyA2MnY3MTljMCA1MCA0NCA5NCA5NCA5NGgxODcgMjE5djMxIDMyaC02Mi02M3YzMSAzMWgxNTYgMTU3di0zMS0zMWgtNjMtNjJ2LTMyLTMxaDE4NyAxNTZjNTAgMCA5NC00NCA5NC05NHogbS0xODctNTMxaC0zNzUtMzc1di0xODhoNzUwdjE4OHogbS02MjUgNjN2NjJoLTYzdi02Mmg2M3ogbTEyNSAwdjYyaC02M3YtNjJoNjN6IG02MjUgNDY4YzAgMTktMTMgMzItMzIgMzJoLTM0M3YtMTU3LTE1NmgtMzItMzF2MzEgMzJoLTYydjYyaDYydjMxIDMyaC02MnY2Mmg2MnYzMSAzMmgtNDA2Yy0xOSAwLTMxLTEzLTMxLTMydi0yNTBjMC0xOCAxMi0zMSAzMS0zMWg0MDZ2LTYyaC0xMjV2LTMyLTMxaDE1NiAxNTd2MzEgMzJoLTEyNXY2MmgzNDNjMTkgMCAzMiAxMyAzMiAzMXYyNTB6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJkYXRlIiB1bmljb2RlPSImI3hlODAxOyIgZD0iTTcxLTc5aDE2MXYxNjFoLTE2MXYtMTYxeiBtMTk3IDBoMTc4djE2MWgtMTc4di0xNjF6IG0tMTk3IDE5N2gxNjF2MTc4aC0xNjF2LTE3OHogbTE5NyAwaDE3OHYxNzhoLTE3OHYtMTc4eiBtLTE5NyAyMTRoMTYxdjE2MWgtMTYxdi0xNjF6IG00MTEtNDExaDE3OXYxNjFoLTE3OXYtMTYxeiBtLTIxNCA0MTFoMTc4djE2MWgtMTc4di0xNjF6IG00MjgtNDExaDE2MXYxNjFoLTE2MXYtMTYxeiBtLTIxNCAxOTdoMTc5djE3OGgtMTc5di0xNzh6IG0tMTk2IDQ4MnYxNjFxMCA3LTYgMTJ0LTEyIDZoLTM2cS03IDAtMTItNnQtNi0xMnYtMTYxcTAtNyA2LTEzdDEyLTVoMzZxNyAwIDEyIDV0NiAxM3ogbTQxMC00ODJoMTYxdjE3OGgtMTYxdi0xNzh6IG0tMjE0IDIxNGgxNzl2MTYxaC0xNzl2LTE2MXogbTIxNCAwaDE2MXYxNjFoLTE2MXYtMTYxeiBtMTggMjY4djE2MXEwIDctNSAxMnQtMTMgNmgtMzVxLTcgMC0xMy02dC01LTEydi0xNjFxMC03IDUtMTN0MTMtNWgzNXE4IDAgMTMgNXQ1IDEzeiBtMjE1IDM2di03MTVxMC0yOS0yMi01MHQtNTAtMjFoLTc4NnEtMjkgMC01MCAyMXQtMjEgNTB2NzE1cTAgMjkgMjEgNTB0NTAgMjFoNzJ2NTRxMCAzNyAyNiA2M3Q2MyAyNmgzNnEzNyAwIDYzLTI2dDI2LTYzdi01NGgyMTR2NTRxMCAzNyAyNyA2M3Q2MyAyNmgzNXEzNyAwIDY0LTI2dDI2LTYzdi01NGg3MXEyOSAwIDUwLTIxdDIyLTUweiIgaG9yaXotYWR2LXg9IjkyOC42IiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImNoZWNrYm94IiB1bmljb2RlPSImI3hlODAyOyIgZD0iTTg0NCA1Mzh2LTUwMGMwLTUxLTQ0LTk0LTk0LTk0aC01NjJjLTUwIDAtOTQgNDMtOTQgOTR2NTYyYzAgNTAgNDQgOTQgOTQgOTRoNTYyYzQ0IDAgODEtMzEgOTQtNzVsMTUwIDg3LTE1MC0xNjh6IG0tNjMtNzVsLTMwMC0zNjMtMzA2IDQwNiAzMDYtMTAwIDMwMCAxODJ2MTJjMCAxOS0xMiAzMS0zMSAzMWgtNTYyYy0xOSAwLTMyLTEyLTMyLTMxdi01NjJjMC0xOSAxMy0zMiAzMi0zMmg1NjJjMTkgMCAzMSAxMyAzMSAzMnY0MjV6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJjaGVja2JveC1ncm91cCIgdW5pY29kZT0iJiN4ZTgwMzsiIGQ9Ik0wIDc4OGgxMDAwdjYyaC0xMDAwdi02MnogbTAtMTI1aDEwMDB2NjJoLTEwMDB2LTYyeiBtMzc1LTEyNXYtNjNoNTYzdjYzaC01NjN6IG01NjMtNTYzdjYzaC01NjN2LTYzaDU2M3ogbS01NjMgMjUwaDU2M3Y2M2gtNTYzdi02M3ogbS0xMjUtMTI1bC0xNTYtOTQtOTQgMzIgOTQtMTI2IDE1NiAxODh6IG0wIDI1MGwtMTU2LTk0LTk0IDMyIDk0LTEyNSAxNTYgMTg3eiBtMCAyNTBsLTE1Ni05NC05NCAzMiA5NC0xMjUgMTU2IDE4N3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InJhZGlvLWdyb3VwIiB1bmljb2RlPSImI3hlODA0OyIgZD0iTTAgNzg4aDEwMDB2NjJoLTEwMDB2LTYyeiBtMC0xMjVoMTAwMHY2MmgtMTAwMHYtNjJ6IG0zMTMtMTg4aDYyNXY2M2gtNjI1di02M3ogbTYyNS0xODdoLTYyNXYtNjNoNjI1djYzeiBtMC0zMTN2NjNoLTYyNXYtNjNoNjI1eiBtLTg0NCA0MzhjLTUwIDAtOTQgNDMtOTQgOTNzNDQgOTQgOTQgOTQgOTQtNDQgOTQtOTQtNDQtOTMtOTQtOTN6IG0wIDEyNWMtMTkgMC0zMS0xMy0zMS0zMnMxMi0zMSAzMS0zMSAzMSAxMyAzMSAzMS0xMiAzMi0zMSAzMnogbTAtMzgyYy01MCAwLTk0IDQ0LTk0IDk0czQ0IDk0IDk0IDk0IDk0LTM4IDk0LTk0LTQ0LTk0LTk0LTk0eiBtMCAxMjVjLTE5IDAtMzEtMTItMzEtMzFzMTItMzEgMzEtMzEgMzEgMTkgMzEgMzEtMTIgMzEtMzEgMzF6IG0wLTM2OWMtNTAgMC05NCA0NC05NCA5NHM0NCA5NCA5NCA5NCA5NC00NCA5NC05NC00NC05NC05NC05NHogbTAgMTI2Yy0xOSAwLTMxLTEzLTMxLTMyczEyLTMxIDMxLTMxIDMxIDEyIDMxIDMxLTEyIDMyLTMxIDMyeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0icmljaC10ZXh0IiB1bmljb2RlPSImI3hlODA1OyIgZD0iTTkzOCA3ODhoLTg3NWMtMzggMC02My0yNS02My02M3YtNzUwYzAtMzggMjUtNjMgNjMtNjNoODc1YzM3IDAgNjIgMjUgNjIgNjN2NzUwYzAgMzgtMjUgNjMtNjIgNjN6IG0tODc1LTEzMmg1MHYtMThoLTUwdjE4eiBtMC0zMWg1MHYtMTloLTUwdjE5eiBtODc1LTY1MGgtODc1djU1Nmg4NzV2LTU1NnogbTAgNTY5aC04NzV2MTloODc1di0xOXogbTAgMzFoLTg3NXYxOWg1MHYtMTNoOTN2MTNoODJ2LTEzaDg3djEzaDgxdi0xM2g5NHYxM2g3NXYtMTNoOTR2MTNoODF2LTEzaDk0djEzaDQ0di0xOXogbS02NTcgNTB2LTE5aC03NXYxOWg3NXogbS03NSAxM3YxOGg4MnYtMThoLTgyeiBtMjUwLTEzdi0xOWgtODF2MTloODF6IG0tODEgMTN2MThoODF2LTE4aC04MXogbTI1MC0xM3YtMTloLTc1djE5aDc1eiBtLTc1IDEzdjE4aDc1di0xOGgtNzV6IG0yNTAtMTN2LTE5aC04MXYxOWg4MXogbS04MSAxM3YxOGg4MXYtMThoLTgxeiBtMjE5LTMyaC01MHYxOWg1MHYtMTl6IG0wIDMyaC01MHYxOGg1MHYtMTh6IG0wIDMxaC01MHY2aC05NHYtMTJoLTgxdjEyaC04OHYtMTJoLTc1djEyaC05NHYtMTJoLTgxdjEyaC05NHYtMTJoLTc1djEyaC05M3YtMTJoLTUwdjI1aDg3NXYtMTl6IG0wIDMxaC04NzV2MTloODc1di0xOXogbS03NTAtNjAwdjYzaDYyNXYtNjNoLTYyNXogbTYyNSAxMjVoLTYyNXY2M2g2MjV2LTYzeiBtLTEyNSAxMjVoLTUwMHY2M2g1MDB2LTYzeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0ic2VsZWN0IiB1bmljb2RlPSImI3hlODA2OyIgZD0iTTAgODUwdi04NzVoMGMwLTM4IDI1LTYzIDYzLTYzaDYyNWMzNyAwIDYyIDI1IDYyIDYzaDB2NTYzaDI1MHYzMTJoLTEwMDB6IG02My02Mmg2MjV2LTE4OGgtNjI1djE4OHogbTAtMzc1aDYyNXYtMTg4aC02MjV2MTg4eiBtMC00Mzh2MTg4aDYyNXYtMTg4aC02MjV6IG04NzUgNjI1aC0xODh2MTg4aDE4OHYtMTg4eiBtLTgxMyAxMjVoNjN2LTYyaC02M3Y2MnogbTAtNjI1aDYzdi02MmgtNjN2NjJ6IG0xMjUgMGg2M3YtNjJoLTYzdjYyeiBtMTI1IDBoNjN2LTYyaC02M3Y2MnogbTE4OCAwdi02MmgtNjN2NjJoNjN6IG0tNDM4IDI1MGg2M3YtNjJoLTYzdjYyeiBtMTI1IDBoNjN2LTYyaC02M3Y2MnogbTEyNSAwaDYzdi02MmgtNjN2NjJ6IG00NjkgMzA2bC02MyA2OWgxMTlsLTU2LTY5eiBtLTcxOS0xODF2NjNoNjN2LTYzaC02M2wwIDB6IG0xMjUgMHY2M2g2M3YtNjNoLTYzbDAgMHoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InRleHRhcmVhIiB1bmljb2RlPSImI3hlODA3OyIgZD0iTTE4OCAxNjN2NjJoNTAwdi02MmgtNTAwbDAgMHogbTAgMjUwaDYyNXY2MmgtNjI1di02MmwwIDB6IG0wLTYzdi02Mmg2MjV2NjJoLTYyNWwwIDB6IG02MjUgMjUwaC02MjV2LTYyaDYyNXY2MmwwIDB6IG0xODctNjI1djc1MGMwIDM4LTI1IDYzLTYyIDYzaC04NzVjLTM4IDAtNjMtMjUtNjMtNjN2LTc1MGMwLTM4IDI1LTYzIDYzLTYzaDg3NWMzNyAwIDYyIDI1IDYyIDYzeiBtLTYyIDc1MHYtNzUwaC04NzV2NzUwaDg3NXoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InRleHQiIHVuaWNvZGU9IiYjeGU4MDg7IiBkPSJNOTM4IDYwMGgtNjU3djYzaDk0djYyaC05NC02Mi05NHYtNjJoOTR2LTYzaC0xNTZjLTM4IDAtNjMtMzEtNjMtNjJ2LTM3NWMwLTM4IDI1LTYzIDYzLTYzaDE1NnYtNjJoLTk0di02M2gyNTB2NjNoLTk0djYyaDY1N2MzNyAwIDYyIDI1IDYyIDYzdjM3NWMwIDMxLTI1IDYyLTYyIDYyeiBtLTg3NS00Mzd2Mzc1aDE1NnYtMzc1aC0xNTZ6IG04NzUgMGgtNjU3djM3NWg2NTd2LTM3NXoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InBlbmNpbCIgdW5pY29kZT0iJiN4ZTgwOTsiIGQ9Ik0yMDMtN2w1MCA1MS0xMzEgMTMxLTUxLTUxdi02MGg3MnYtNzFoNjB6IG0yOTEgNTE4cTAgMTItMTIgMTItNSAwLTktNGwtMzAzLTMwMnEtNC00LTQtMTAgMC0xMiAxMy0xMiA1IDAgOSA0bDMwMyAzMDJxMyA0IDMgMTB6IG0tMzAgMTA3bDIzMi0yMzItNDY0LTQ2NWgtMjMydjIzM3ogbTM4MS01NHEwLTI5LTIwLTUwbC05My05My0yMzIgMjMzIDkzIDkycTIwIDIxIDUwIDIxIDI5IDAgNTEtMjFsMTMxLTEzMXEyMC0yMiAyMC01MXoiIGhvcml6LWFkdi14PSI4NTcuMSIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJmaWxlIiB1bmljb2RlPSImI3hlODBhOyIgZD0iTTQ2OSAxNjNoLTQ2OXYtMjUxaDkzOHYyNTFoLTQ2OXogbTQwNi0xMjVoLTEyNXY2MmgxMjV2LTYyeiBtLTY1NiA1MDBsMjUwIDI1MCAyNTAtMjUwaC0xNTZ2LTMxM2gtMTg4djMxM3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImhpZGRlbiIgdW5pY29kZT0iJiN4ZTgwYjsiIGQ9Ik02MyA1MzhsNjIgMCAwIDYyLTYyIDB6IG0xMjUgMGw2MiAwIDAgNjItNjIgMHogbTEyNSAwbDYyIDAgMCA2Mi02MiAweiBtMTI1IDBsNjIgMCAwIDYyLTYyIDB6IG0xMjUgMGw2MiAwIDAgNjItNjIgMHogbTEyNSAwbDYyIDAgMCA2Mi02MiAweiBtMTI1IDBsNjIgMCAwIDYyLTYyIDB6IG0tODEzLTYzbDYzIDAgMCA2My02MyAweiBtOTM4LTYybDYyIDAgMCA2Mi02MiAweiBtLTkzOC02M2w2MyAwIDAgNjMtNjMgMHogbTkzOC02Mmw2MiAwIDAgNjItNjIgMHogbS05MzgtNjNsNjMgMCAwIDYzLTYzIDB6IG05MzgtNjJsNjIgMCAwIDYyLTYyIDB6IG0tODEzLTYzbDYzIDAgMCA2My02MyAweiBtMTI1IDBsNjMgMCAwIDYzLTYzIDB6IG0xMjUgMGw2MyAwIDAgNjMtNjMgMHogbTEyNSAwbDYzIDAgMCA2My02MyAweiBtMTI1IDBsNjMgMCAwIDYzLTYzIDB6IG0xMjUgMGw2MyAwIDAgNjMtNjMgMHogbTEyNSAwbDYzIDAgMCA2My02MyAweiBtNjMgNDM4bDYyIDAgMCA2Mi02MiAweiBtLTkzOC00MzhsNjMgMCAwIDYzLTYzIDB6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KCjxnbHlwaCBnbHlwaC1uYW1lPSJidXR0b24iIHVuaWNvZGU9IiYjeGU4MGQ7IiBkPSJNNjIgNTM4bDg3NSAwIDAgNjItODc1IDB6IG0tNjItMzc1bDYzIDAgMCAzNzUtNjMgMHogbTYzLTYzbDg3NSAwIDAgNjMtODc1IDB6IG04NzUgNjNsNjIgMCAwIDM3NS02MiAweiBtLTU1MiAyODBxLTM0IDAtNTQtMjUtMTktMjUtMTktNjggMC00MyAxOS02OCAyMC0yNSA1NC0yNSAzMyAwIDUzIDI1IDE5IDI1IDE5IDY4IDAgNDMtMTkgNjgtMjAgMjUtNTMgMjV6IG0wIDI1cTQ4IDAgNzYtMzIgMjktMzIgMjktODYgMC01NC0yOS04Ni0yOC0zMi03Ni0zMi00OCAwLTc3IDMyLTI5IDMyLTI5IDg2IDAgNTQgMjkgODYgMjkgMzIgNzcgMzJ6IG0xNTMtNGwzMSAwIDAtOTYgMTAyIDk2IDQwIDAtMTEzLTEwNiAxMjEtMTIyLTQxIDAtMTA5IDExMCAwLTExMC0zMSAwIDAgMjI4eiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+Cgo8Z2x5cGggZ2x5cGgtbmFtZT0iaGVhZGVyIiB1bmljb2RlPSImI3hlODBmOyIgZD0iTTkzOS03OXEtMjUgMC03NCAydC03NSAycS0yNCAwLTczLTJ0LTc0LTJxLTEzIDAtMjEgMTJ0LTcgMjVxMCAxOCA5IDI2dDIyIDkgMjkgNCAyNSA5cTE4IDExIDE4IDc4bDAgMjE4cTAgMTItMSAxNy03IDMtMjggM2gtMzc2cS0yMiAwLTI5LTMgMC01IDAtMTdsLTEtMjA3cTAtNzkgMjEtOTEgOS02IDI2LTh0MzItMiAyNS04IDExLTI2cTAtMTQtNi0yNnQtMjEtMTNxLTI2IDAtNzggMnQtNzcgMnEtMjQgMC03MS0ydC03MS0ycS0xMyAwLTIwIDEydC03IDI1cTAgMTcgOSAyNXQyMCAxMCAyNiA0IDI0IDlxMTggMTMgMTggODBsLTEgMzF2NDU0cTAgMiAxIDE1dDAgMjAtMSAyMS0yIDI0LTQgMjAtNiAxOC05IDEwcS04IDUtMjUgN3QtMjkgMS0yMyA3LTEwIDI2cTAgMTQgNiAyNnQyMCAxM3EyNiAwIDc4LTJ0NzctMnEyMyAwIDcxIDJ0NzAgMnExNCAwIDIxLTEzdDctMjZxMC0xNy05LTI1dC0yMi04LTI3LTItMjQtN3EtMjAtMTItMjAtOTBsMS0xNzhxMC0xMiAwLTE4IDctMiAyMi0yaDM5MHExNCAwIDIxIDIgMSA2IDEgMThsMCAxNzhxMCA3OC0xOSA5MC0xMCA2LTMzIDd0LTM3IDctMTQgMjhxMCAxNCA3IDI2dDIxIDEzcTI0IDAgNzQtMnQ3My0ycTI0IDAgNzIgMnQ3MiAycTE0IDAgMjEtMTN0Ny0yNnEwLTE3LTEwLTI1dC0yMi04LTI5LTItMjQtN3EtMjAtMTMtMjAtOTBsMS01MjZxMC02NiAxOS03OCA5LTYgMjUtOHQzMC0yIDIzLTkgMTAtMjVxMC0xNC02LTI2dC0yMC0xM3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9InBhcmFncmFwaCIgdW5pY29kZT0iJiN4ZTgxMDsiIGQ9Ik03MTMgNzQ1di00MXEwLTE2LTEwLTM0dC0yNC0xOHEtMjggMC0zMC0xLTE0LTMtMTgtMTctMS02LTEtMzZ2LTY0M3EwLTE0LTExLTI0dC0yNC0xMGgtNjBxLTE0IDAtMjQgMTB0LTEwIDI0djY4MGgtODB2LTY4MHEwLTE0LTktMjR0LTI1LTEwaC02MHEtMTQgMC0yNCAxMHQtMTAgMjR2Mjc3cS04MiA3LTEzNyAzMy03MCAzMy0xMDcgMTAwLTM2IDY1LTM2IDE0NSAwIDkyIDUwIDE1OSA0OSA2NiAxMTYgODkgNjIgMjEgMjMzIDIxaDI2N3ExNCAwIDI0LTEwdDEwLTI0eiIgaG9yaXotYWR2LXg9IjcxNC4zIiAvPgoKPGdseXBoIGdseXBoLW5hbWU9Im51bWJlciIgdW5pY29kZT0iJiN4ZTgxMTsiIGQ9Ik04NzUgNDc1djEyNWgtMTU2bDMxIDI1MGgtMTI1bC0zMS0yNTBoLTI1MGwzMSAyNTBoLTEyNWwtMzEtMjUwaC0yMTl2LTEyNWgyMDNsLTMxLTI1MGgtMTcydi0xMjVoMTU2bC0zMS0yNTBoMTI1bDMxIDI1MGgyNTBsLTMxLTI1MGgxMjVsMzEgMjUwaDIxOXYxMjVoLTIwM2wzMSAyNTBoMTcyeiBtLTMyOC0yNTBoLTI1MGwzMSAyNTBoMjUwbC0zMS0yNTB6IiBob3Jpei1hZHYteD0iODc1IiAvPgoKPGdseXBoIGdseXBoLW5hbWU9ImNvcHkiIHVuaWNvZGU9IiYjeGYyNGQ7IiBkPSJNOTI5LTYxdjYwN3EwIDgtNiAxM3QtMTIgNWgtNjA3cS04IDAtMTMtNXQtNS0xM3YtNjA3cTAtNyA1LTEydDEzLTZoNjA3cTcgMCAxMiA2dDYgMTJ6IG03MSA2MDd2LTYwN3EwLTM3LTI2LTYzdC02My0yNmgtNjA3cS0zNyAwLTYzIDI2dC0yNyA2M3Y2MDdxMCAzNyAyNyA2NHQ2MyAyNmg2MDdxMzcgMCA2My0yNnQyNi02NHogbS0yMTQgMjE1di05MGgtNzJ2OTBxMCA3LTUgMTJ0LTEzIDZoLTYwN3EtNyAwLTEyLTZ0LTYtMTJ2LTYwN3EwLTggNi0xM3QxMi01aDkwdi03MmgtOTBxLTM2IDAtNjMgMjd0LTI2IDYzdjYwN3EwIDM3IDI2IDYzdDYzIDI2aDYwN3EzNyAwIDY0LTI2dDI2LTYzeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+CjwvZm9udD4KPC9kZWZzPgo8L3N2Zz4=) format("svg");font-weight:400;font-style:normal}[class*=" icon-"]:before,[class^=icon-]:before{font-family:form-builder-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-autocomplete:before{content:'\e800'}.icon-date:before{content:'\e801'}.icon-checkbox:before{content:'\e802'}.icon-checkbox-group:before{content:'\e803'}.icon-radio-group:before{content:'\e804'}.icon-rich-text:before{content:'\e805'}.icon-select:before{content:'\e806'}.icon-textarea:before{content:'\e807'}.icon-text:before{content:'\e808'}.icon-pencil:before{content:'\e809'}.icon-file:before{content:'\e80a'}.icon-hidden:before{content:'\e80b'}.icon-button:before{content:'\e80d'}.icon-header:before{content:'\e80f'}.icon-paragraph:before{content:'\e810'}.icon-number:before{content:'\e811'}.icon-copy:before{content:'\f24d'}*{box-sizing:border-box}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.btn,.frmb .prev-holder label,.frmb .sortable-options-wrap label,.frmb li.disabled-field label,.frmb li.no-fields label{font-weight:400}textarea{overflow:auto}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}.btn-group{position:relative}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-group .input-group .form-control:last-child,.btn-group .input-group-addon:last-child,.btn-group .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.btn-group .input-group-btn:first-child>.btn:not(:first-child),.btn-group .input-group-btn:last-child>.btn,.btn-group .input-group-btn:last-child>.btn-group>.btn,.btn-group .input-group-btn:last-child>.dropdown-toggle,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn{padding:6px 12px;margin-bottom:0;font-size:14px;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:4px}.btn.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn.btn-sm,.btn.btn-xs{font-size:12px;line-height:1.5;border-radius:3px}.btn.btn-sm{padding:5px 10px}.btn.btn-xs{padding:1px 5px}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.input-group{position:relative;display:table;border-collapse:separate}.form-control,output{display:block;font-size:14px;line-height:1.42857143}.input-group .form-control{z-index:2;width:100%;margin-bottom:0}textarea.form-control{height:auto}.form-control{height:34px;width:100%;padding:6px 12px;border-radius:4px}.form-control:focus{outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-group{margin-left:0;margin-bottom:15px}.pull-right{float:right}.pull-left{float:left}.fb-required,.required-asterisk{color:#c10000}.fb-checkbox-inline,.fb-radio-inline{display:inline-block;padding-left:20px;vertical-align:middle}.fb-checkbox-inline:first-child,.fb-radio-inline:first-child{padding-left:0}.fb-autocomplete-list{background-color:#fff;display:none;list-style:none;padding:0;border:1px solid #ccc;border-width:0 1px 1px;position:absolute;z-index:20;max-height:200px;overflow-y:auto}.fb-autocomplete-list li{display:none;cursor:default;padding:5px;margin:0;-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.fb-autocomplete-list li.active-option,.fb-autocomplete-list li:hover{background-color:rgba(0,0,0,.075)}@-webkit-keyframes PLACEHOLDER{0%{height:1px}100%{height:15px}}@keyframes PLACEHOLDER{0%{height:1px}100%{height:15px}}.cb-wrap{float:right;width:26%;-webkit-transition:-webkit-transform 250ms;transition:-webkit-transform 250ms;transition:transform 250ms;transition:transform 250ms,-webkit-transform 250ms}.cb-wrap.pull-left .form-actions{float:left}.cb-wrap h4{margin-top:0;color:#666}.cb-wrap .save:hover{color:#08fe00}@media (max-width:481px){.cb-wrap{width:64px}.cb-wrap h4{display:none}}.frmb-control{margin:0;padding:1px;border-radius:5px}.frmb-control li{cursor:move;list-style:none;margin:0 0 -1px;padding:10px;text-align:left;background:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;box-shadow:inset 0 0 0 1px #c5c5c5}.frmb-control li .control-icon{width:16px;height:auto;margin-right:10px;margin-left:.2em;display:inline-block}.frmb-control li .control-icon img,.frmb-control li .control-icon svg{max-width:100%;height:auto}.frmb-control li:first-child{border-radius:5px 5px 0 0;margin-top:0}.frmb-control li:last-child{border-radius:0 0 5px 5px}.frmb-control li::before{margin-right:10px;font-size:16px}.frmb-control li:hover{background-color:#f2f2f2}.frmb-control li.ui-sortable-helper{border-radius:5px;-webkit-transition:box-shadow 250ms;transition:box-shadow 250ms;box-shadow:2px 2px 6px 0 #666;border:1px solid #fff}.frmb-control li.ui-state-highlight{width:0;overflow:hidden;padding:0;margin:0;border:0}.frmb-control li.moving{opacity:.6}.frmb-control li.fb-separator{background-color:transparent;box-shadow:none;padding:0;cursor:default}.frmb-control li.fb-separator hr{margin:10px 0}@media (max-width:481px){.frmb-control li::before{font-size:30px}.frmb-control li span{display:none}}.frmb-control.sort-enabled li.ui-state-highlight{box-shadow:none;height:0;width:100%;background:-webkit-radial-gradient(center ellipse,#545454 0,transparent 75%);background:radial-gradient(ellipse at center,#545454 0,transparent 75%);border:0;-webkit-clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);visibility:visible;overflow:hidden;margin:1px 0 3px;-webkit-animation:PLACEHOLDER 250ms forwards;animation:PLACEHOLDER 250ms forwards}.frmb-control .input-set-0{border-radius:5px 5px 0 0}.fb-mobile .form-actions{width:100%}.fb-mobile .form-actions button{width:100%;font-size:.85em!important;display:block!important;border-radius:0!important;margin-top:-1px;margin-left:0!important}.fb-mobile .form-actions button:first-child{border-radius:5px 5px 0 0!important;margin-top:0!important;border-bottom:0 none}.fb-mobile .form-actions button:last-child{border-radius:0 0 5px 5px!important}.form-actions{float:right;margin-top:5px}.form-actions button{border:0}.empty .frmb{border:3px dashed #ccc;margin-right:5px;background-color:rgba(255,255,255,.25)}.stage-wrap{position:relative;float:left;width:74%}.stage-wrap.pull-right .frmb{margin:0 0 0 6px}@media (max-width:481px){.stage-wrap{width:calc(100% - 64px)}}.stage-wrap.empty::after{content:attr(data-content);position:absolute;text-align:center;top:50%;left:0;width:100%;margin-top:-1em}.frmb .prev-holder input[type=number],.frmb .prev-holder input[type=date]{width:auto}.frmb{list-style-type:none;min-height:200px;margin:0 6px 0 0;padding:0;-webkit-transition:background-color .5s ease-in-out;transition:background-color .5s ease-in-out}.frmb .fb-required{color:#c10000}.frmb.removing{overflow:hidden}.frmb>li:hover{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 0 8px rgba(102,175,233,.6)}.frmb>li:hover .field-actions{opacity:1}.frmb>li:hover li :hover{background:#fefefe}.frmb li{position:relative;padding:6px;clear:both;margin-left:0;margin-bottom:3px;background-color:#fff;-webkit-transition:background-color 250ms ease-in-out,margin-top .4s;transition:background-color 250ms ease-in-out,margin-top .4s}.frmb li.hidden-field{background-color:rgba(255,255,255,.6)}.frmb li:first-child{border-top-right-radius:5px;border-top-left-radius:5px}.frmb li:first-child .field-actions .btn:last-child{border-radius:0 5px 0 0}.frmb li:last-child{border-bottom-right-radius:5px;border-bottom-left-radius:5px}@keyframes PLACEHOLDER{0%{height:0}100%{height:15px}}.frmb li.frmb-placeholder,.frmb li.ui-state-highlight{height:0;padding:0;background:-webkit-radial-gradient(center ellipse,#545454 0,transparent 75%);background:radial-gradient(ellipse at center,#545454 0,transparent 75%);border:0;-webkit-clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);visibility:visible;overflow:hidden;margin-bottom:3px;-webkit-animation:PLACEHOLDER 250ms forwards;animation:PLACEHOLDER 250ms forwards}.frmb li.moving,.frmb li.ui-sortable-helper{-webkit-transition:box-shadow .5s ease-in-out;transition:box-shadow .5s ease-in-out;box-shadow:2px 2px 6px 0 #666;border:1px solid #fff;border-radius:5px}.frmb li.disabled-field{z-index:1;position:relative;overflow:visible}.frmb li.deleting,.frmb-tt{z-index:20;pointer-events:none}.frmb li.disabled-field:hover .frmb-tt{display:inline-block}.frmb li.disabled-field [type=checkbox]{float:left;margin-right:10px}.frmb li.disabled-field h2{border-bottom:0 none}.frmb li.disabled-field label{font-size:12px;color:#666}.frmb li.disabled-field .prev-holder{cursor:default;line-height:28px;padding-left:5px}.frmb li .close-field{position:absolute;color:#666;left:50%;bottom:6px;background:#fff;border-top:1px solid #c5c5c5;border-left:1px solid #c5c5c5;border-right:1px solid #c5c5c5;-webkit-transform:translateX(-50%);transform:translateX(-50%);padding:0 5px;border-top-right-radius:3px;border-top-left-radius:3px;cursor:pointer;-webkit-transition:background-color 250ms ease-in-out;transition:background-color 250ms ease-in-out}.frmb li .close-field:hover{text-decoration:none}.frmb li.button-field .prev-holder,.frmb li.button-field address,.frmb li.button-field blockquote,.frmb li.button-field canvas,.frmb li.button-field h1,.frmb li.button-field h2,.frmb li.button-field h3,.frmb li.button-field output,.frmb li.button-field p,.frmb li.header-field .prev-holder,.frmb li.header-field address,.frmb li.header-field blockquote,.frmb li.header-field canvas,.frmb li.header-field h1,.frmb li.header-field h2,.frmb li.header-field h3,.frmb li.header-field output,.frmb li.header-field p,.frmb li.paragraph-field .prev-holder,.frmb li.paragraph-field address,.frmb li.paragraph-field blockquote,.frmb li.paragraph-field canvas,.frmb li.paragraph-field h1,.frmb li.paragraph-field h2,.frmb li.paragraph-field h3,.frmb li.paragraph-field output,.frmb li.paragraph-field p{margin:0}.frmb li.button-field .field-label,.frmb li.header-field .field-label,.frmb li.paragraph-field .field-label{display:none}.frmb li.button-field.editing .field-label,.frmb li.header-field.editing .field-label,.frmb li.paragraph-field.editing .field-label{display:block}.frmb .frm-holder,.frmb li.checkbox-field .field-label{display:none}.frmb li.paragraph-field .fld-label{min-height:150px}.frmb li.delete:hover,.frmb li.delete:hover .close-field,.frmb li.deleting,.frmb li.deleting .close-field,.frmb li:hover li.delete:hover,.frmb li:hover li.delete:hover .close-field{background-color:#fdd}.frmb.disabled-field{padding:0 5px}.frmb.disabled-field :hover{border-color:transparent}.frmb.disabled-field .form-element{float:none;margin-bottom:10px;overflow:visible;padding:5px 0;position:relative}.frmb .tooltip{left:20px}.frmb .prev-holder{display:block}.frmb .prev-holder .form-group{margin:0}.frmb .prev-holder .ql-editor{min-height:125px}.frmb .prev-holder .form-group>label:not([class=fb-checkbox-label]){display:none}.frmb .prev-holder input[type=text],.frmb .prev-holder input[type=number],.frmb .prev-holder select,.frmb .prev-holder textarea{background-color:#fff;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.frmb .prev-holder select[multiple]{height:auto}.frmb .prev-holder input[type=checkbox],.frmb .prev-holder input[type=radio]{display:inline-block}.frmb .prev-holder input[type=color]{width:60px;padding:2px;display:inline-block}.frmb .required-asterisk{display:none}.frmb .field-label,.frmb .legend{color:#666;margin-bottom:5px;line-height:27px;font-size:16px;font-weight:400}.frmb .disabled-field .field-label{display:block}.frmb .other-val{margin-left:5px;display:none}.frmb .field-actions{position:absolute;top:0;right:0;opacity:0}.frmb .field-actions a:hover{text-decoration:none;color:#000}.frmb .field-actions .btn{display:inline-block;height:32px;padding:0 6px;border-radius:0;border-color:#c5c5c5;background-color:#fff;color:#c5c5c5;line-height:32px;font-size:16px;border-width:0 0 1px 1px}.frmb .field-actions .btn:first-child{border-bottom-left-radius:5px}.frmb .field-actions .toggle-form:hover{background-color:#65aac6;color:#fff}.frmb .field-actions .copy-button{font-size:14px}.frmb .field-actions .copy-button:hover{background-color:#6fc665;color:#fff}.frmb .field-actions .del-button{font-size:20px;line-height:30px}.frmb .field-actions .del-button:hover{background-color:#c66865;color:#fff}.frmb .option-actions{text-align:right;margin-top:10px;width:100%;margin-left:2%}.frmb .option-actions a,.frmb .option-actions button{background:#fff;padding:5px 10px;border:1px solid #c5c5c5;font-size:14px;border-radius:5px;cursor:default}.frmb .sortable-options-wrap{width:81.33333333%;display:inline-block}@media (max-width:481px){.frmb .sortable-options-wrap{display:block;width:100%}}.frmb .sortable-options{display:inline-block;width:100%;margin-left:2%;background:#c5c5c5;margin-bottom:0;border-radius:5px;list-style:none;padding:0}.frmb .sortable-options>li{cursor:move;margin:1px}.tooltip-element,[tooltip]:hover:after{cursor:default;font-size:12px;color:#fff}.frmb .sortable-options>li:nth-child(1) .remove,.radio-group-field .frmb .sortable-options>li:nth-child(2) .remove{display:none}.frmb .sortable-options>li .remove{position:absolute;opacity:1;right:14px;height:17px;width:17px;line-height:17px;text-align:center;top:14px;font-size:18px;padding:0;color:#c10000}.frmb .sortable-options>li .remove:hover{background-color:#c10000;text-decoration:none;color:#fff}.frmb .sortable-options .option-selected{margin:0;width:5%}.frmb .sortable-options input[type=text]{width:calc(44.5% - 17px);margin:0 1%;float:none}.frmb .form-field .form-group{width:100%;clear:left;float:none}.frmb .col-md-6 .form-elements,.frmb .col-md-8 .form-elements{width:100%}.frmb .field-options .add-area .add{clear:both}.frmb .style-wrap button.selected{border:1px solid #000;margin-top:0;margin-right:1px;box-shadow:0 0 0 1px #fff inset;padding:1px 5px}.frmb .form-elements{padding:10px 5px;background:#f7f7f7;border-radius:3px;margin:0;border:1px solid #c5c5c5}.frmb .form-elements .input-wrap{width:81.33333333%;margin-left:2%;float:left}.frmb .form-elements .input-wrap>input[type=checkbox]{margin-top:8px}.frmb .form-elements .add{clear:both}.frmb .form-elements input[type=text],.frmb .form-elements input[type=number],.frmb .form-elements input[type=color],.frmb .form-elements input[type=date],.frmb .form-elements select,.frmb .form-elements textarea{-webkit-transition:background 250ms ease-in-out;transition:background 250ms ease-in-out;padding:6px 12px;border:1px solid #c5c5c5;background-color:#fff}@media (max-width:481px){.frmb .form-elements .input-wrap{width:100%;margin-left:0;float:none}}.frmb .form-elements input[type=number]{width:auto}.frmb .form-elements .btn-group{margin-left:2%}.col-md-6 .frmb .form-elements .false-label,.col-md-6 .frmb .form-elements label,.col-md-8 .frmb .form-elements .false-label,.col-md-8 .frmb .form-elements label{display:block}.frmb .form-elements .false-label:first-child,.frmb .form-elements label:first-child{width:16.66666667%;padding-top:7px;margin-bottom:0;text-align:right;font-weight:700;float:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:capitalize}@media (max-width:481px){.frmb .form-elements .false-label:first-child,.frmb .form-elements label:first-child{display:block;width:auto;float:none;text-align:left}.frmb .form-elements .false-label:first-child.empty-label,.frmb .form-elements label:first-child.empty-label{display:none}}.frmb .form-elements .false-label.multiple,.frmb .form-elements .false-label.other-label,.frmb .form-elements .false-label.required-label,.frmb .form-elements .false-label.roles-label,.frmb .form-elements .false-label.toggle-label,.frmb .form-elements label.multiple,.frmb .form-elements label.other-label,.frmb .form-elements label.required-label,.frmb .form-elements label.roles-label,.frmb .form-elements label.toggle-label{text-align:left;float:none;margin-bottom:-3px;font-weight:400;width:calc(81.3333% - 23px)}.autocomplete-field .sortable-options .option-selected{display:none}.fb-mobile .field-actions{opacity:1}[tooltip]{position:relative}[tooltip]:hover:after{background:rgba(0,0,0,.9);border-radius:5px 5px 5px 0;bottom:23px;content:attr(tooltip);padding:10px 5px;position:absolute;z-index:98;left:2px;width:230px;text-shadow:none;line-height:1.5em}.form-wrap::after,.kc-toggle span::after,.kc-toggle span::before,[tooltip]:hover:before{content:''}[tooltip]:hover:before{border:solid;border-color:#222 transparent;border-width:6px 6px 0;bottom:17px;left:2px;position:absolute;z-index:99;cursor:default}.tooltip-element{visibility:visible;background:#000;width:16px;height:16px;border-radius:8px;display:inline-block;text-align:center;line-height:16px;margin:0 5px}.kc-toggle{padding-left:0!important}.kc-toggle span{position:relative;width:48px;height:24px;background:#e6e6e6;display:inline-block;border-radius:4px;border:1px solid #ccc;padding:2px;overflow:hidden;float:left;margin-right:5px}.kc-toggle span::after,.kc-toggle span::before{position:absolute;display:inline-block;top:0}.kc-toggle span::after{position:relative;width:50%;height:100%;left:0;border-radius:3px;background:-webkit-linear-gradient(top,#fff 0,#ccc 100%);background:linear-gradient(to bottom,#fff 0,#ccc 100%);border:1px solid #999;-webkit-transition:-webkit-transform 50ms;transition:-webkit-transform 50ms;transition:transform 50ms;transition:transform 50ms,-webkit-transform 50ms;-webkit-transform:translateX(0);transform:translateX(0)}.kc-toggle span::before{border-radius:4px;top:2px;left:2px;width:calc(100% - 4px);height:18px;box-shadow:0 0 1px 1px #b3b3b3 inset;background-color:transparent}.kc-toggle input{height:0;overflow:hidden;width:0;opacity:0;pointer-events:none;margin:0}.kc-toggle input:checked+span::after{-webkit-transform:translateX(100%);transform:translateX(100%)}.kc-toggle input:checked+span::before{background-color:#6fc665}.form-wrap{position:relative}.form-wrap::after{display:table;clear:both}.cb-wrap,.stage-wrap{vertical-align:top}.stage-wrap h4{margin-top:0;color:#666}.form-elements input.error{border:1px solid #c10000}.form-elements input.fld-maxlength{width:10%}.form-elements input.field-error{background:#fefefe;border:1px solid #c5c5c5}.form-elements label em{display:block;font-weight:400;font-size:.75em}.form-elements label.maxlength-label{line-height:1em}.form-elements .available-roles{display:none;padding:10px;margin:10px 0;background:#e6e6e6;box-shadow:inset 0 0 2px 0 #b3b3b3}@media (max-width:481px){.form-elements .available-roles{margin-left:0}}.form-elements .available-roles label{font-weight:400;width:auto;float:none;display:inline}.form-elements .available-roles input{display:inline;top:auto}.form-elements,.form-group,.multi-row span,textarea{display:block}.form-elements::after,.form-group::after{content:'.';display:block;height:0;clear:both;visibility:hidden}.form-elements .field-options div:hover,.frmb .legend,.frmb .prev-holder{cursor:move}.frmb-tt{display:none;position:absolute;top:0;left:0;border:1px solid #262626;background-color:#666;border-radius:5px;padding:5px;color:#fff;text-align:left;font-size:12px}.frmb-tt::after,.frmb-tt::before{content:'';position:absolute;border-style:solid;border-width:10px 10px 0;border-color:#666 transparent;display:block;width:0;z-index:1;margin-left:-10px;bottom:-10px;left:20px}.frmb-tt a{text-decoration:underline;color:#fff}.fb-mobile .frmb li .del-button,.fb-mobile .frmb li .toggle-form,.frmb li:hover .del-button,.frmb li:hover .toggle-form{opacity:1}.fresh .frmb .legend .element-info{display:inline-block;visibility:visible;line-height:12px;margin-left:6px}.frmb-xml .ui-dialog-content{white-space:pre-wrap;word-wrap:break-word;font-size:12px;padding:0 30px;margin-top:0}.toggle-form{margin-left:5px;opacity:0}.toggle-form:hover{border-color:#ccc}.toggle-form::before{margin:0}.formb-field-vars .copy-var{display:inline-block;width:24px;height:24px;background:#b3b3b3;text-indent:-9999px}.ui-button .ui-button-text{line-height:0}.form-builder-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);display:none;z-index:10}.form-builder-overlay.visible{display:block}.form-builder-dialog{position:absolute;border-radius:5px;background:#fff;z-index:20;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);top:0;left:0;padding:10px;box-shadow:0 3px 10px #000;min-width:166px}.form-builder-dialog h3{margin-top:0}.form-builder-dialog.data-dialog{width:65%;background-color:#23241f}.form-builder-dialog.data-dialog pre{background:0 0;border:0;box-shadow:none;margin:0;color:#f2f2f2}.form-builder-dialog.positioned{-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.form-builder-dialog.positioned .button-wrap::before{content:'';width:0;height:0;border-left:15px solid transparent;border-right:15px solid transparent;border-top:10px solid #fff;position:absolute;left:50%;top:100%;-webkit-transform:translate(-50%,10px);transform:translate(-50%,10px)}.form-builder-dialog .button-wrap{position:relative;margin-top:10px;text-align:right;clear:both}.form-builder-dialog .button-wrap .btn{margin-left:10px} \ No newline at end of file diff --git a/dist/form-builder.min.js b/dist/form-builder.min.js index 2153a110d..686ad212a 100644 --- a/dist/form-builder.min.js +++ b/dist/form-builder.min.js @@ -6,5 +6,5 @@ Author: Kevin Chappell !function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!s&&l)return l(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return o(n?n:e)},u,u.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}},{}],15:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}n.__esModule=!0;var o=e("../core-js/is-iterable"),i=r(o),a=e("../core-js/get-iterator"),s=r(a);n.default=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,l=(0,s.default)(e);!(r=(a=l.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&l.return&&l.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if((0,i.default)(Object(t)))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},{"../core-js/get-iterator":2,"../core-js/is-iterable":3}],16:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}n.__esModule=!0;var o=e("../core-js/array/from"),i=r(o);n.default=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu;)if(s=l[u++],s!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}}},{"./_to-index":97,"./_to-iobject":99,"./_to-length":100}],35:[function(e,t,n){var r=e("./_ctx"),o=e("./_iobject"),i=e("./_to-object"),a=e("./_to-length"),s=e("./_array-species-create");t.exports=function(e,t){var n=1==e,l=2==e,c=3==e,u=4==e,f=6==e,d=5==e||f,p=t||s;return function(t,s,v){for(var h,m,y=i(t),b=o(y),g=r(s,v,3),_=a(b.length),w=0,x=n?p(t,_):l?p(t,0):void 0;_>w;w++)if((d||w in b)&&(h=b[w],m=g(h,w,y),e))if(n)x[w]=m;else if(m)switch(e){case 3:return!0;case 5:return h;case 6:return w;case 2:x.push(h)}else if(u)return!1;return f?-1:c||u?u:x}}},{"./_array-species-create":37,"./_ctx":45,"./_iobject":60,"./_to-length":100,"./_to-object":101}],36:[function(e,t,n){var r=e("./_is-object"),o=e("./_is-array"),i=e("./_wks")("species");t.exports=function(e){var t;return o(e)&&(t=e.constructor,"function"!=typeof t||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&(t=t[i],null===t&&(t=void 0))),void 0===t?Array:t}},{"./_is-array":62,"./_is-object":63,"./_wks":106}],37:[function(e,t,n){var r=e("./_array-species-constructor");t.exports=function(e,t){return new(r(e))(t)}},{"./_array-species-constructor":36}],38:[function(e,t,n){var r=e("./_cof"),o=e("./_wks")("toStringTag"),i="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(e){}};t.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),o))?n:i?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},{"./_cof":39,"./_wks":106}],39:[function(e,t,n){var r={}.toString;t.exports=function(e){return r.call(e).slice(8,-1)}},{}],40:[function(e,t,n){"use strict";var r=e("./_object-dp").f,o=e("./_object-create"),i=e("./_redefine-all"),a=e("./_ctx"),s=e("./_an-instance"),l=e("./_defined"),c=e("./_for-of"),u=e("./_iter-define"),f=e("./_iter-step"),d=e("./_set-species"),p=e("./_descriptors"),v=e("./_meta").fastKey,h=p?"_s":"size",m=function(e,t){var n,r=v(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};t.exports={getConstructor:function(e,t,n,u){var f=e(function(e,r){s(e,f,t,"_i"),e._i=o(null),e._f=void 0,e._l=void 0,e[h]=0,void 0!=r&&c(r,n,e[u],e)});return i(f.prototype,{clear:function(){for(var e=this,t=e._i,n=e._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete t[n.i];e._f=e._l=void 0,e[h]=0},delete:function(e){var t=this,n=m(t,e);if(n){var r=n.n,o=n.p;delete t._i[n.i],n.r=!0,o&&(o.n=r),r&&(r.p=o),t._f==n&&(t._f=r),t._l==n&&(t._l=o),t[h]--}return!!n},forEach:function(e){s(this,f,"forEach");for(var t,n=a(e,arguments.length>1?arguments[1]:void 0,3);t=t?t.n:this._f;)for(n(t.v,t.k,this);t&&t.r;)t=t.p},has:function(e){return!!m(this,e)}}),p&&r(f.prototype,"size",{get:function(){return l(this[h])}}),f},def:function(e,t,n){var r,o,i=m(e,t);return i?i.v=n:(e._l=i={i:o=v(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=i),r&&(r.n=i),e[h]++,"F"!==o&&(e._i[o]=i)),e},getEntry:m,setStrong:function(e,t,n){u(e,t,function(e,t){this._t=e,this._k=t,this._l=void 0},function(){for(var e=this,t=e._k,n=e._l;n&&n.r;)n=n.p;return e._t&&(e._l=n=n?n.n:e._t._f)?"keys"==t?f(0,n.k):"values"==t?f(0,n.v):f(0,[n.k,n.v]):(e._t=void 0,f(1))},n?"entries":"values",!n,!0),d(t)}}},{"./_an-instance":31,"./_ctx":45,"./_defined":46,"./_descriptors":47,"./_for-of":53,"./_iter-define":66,"./_iter-step":68,"./_meta":72,"./_object-create":75,"./_object-dp":76,"./_redefine-all":88,"./_set-species":90}],41:[function(e,t,n){var r=e("./_classof"),o=e("./_array-from-iterable");t.exports=function(e){return function(){if(r(this)!=e)throw TypeError(e+"#toJSON isn't generic");return o(this)}}},{"./_array-from-iterable":33,"./_classof":38}],42:[function(e,t,n){"use strict";var r=e("./_global"),o=e("./_export"),i=e("./_meta"),a=e("./_fails"),s=e("./_hide"),l=e("./_redefine-all"),c=e("./_for-of"),u=e("./_an-instance"),f=e("./_is-object"),d=e("./_set-to-string-tag"),p=e("./_object-dp").f,v=e("./_array-methods")(0),h=e("./_descriptors");t.exports=function(e,t,n,m,y,b){var g=r[e],_=g,w=y?"set":"add",x=_&&_.prototype,j={};return h&&"function"==typeof _&&(b||x.forEach&&!a(function(){(new _).entries().next()}))?(_=t(function(t,n){u(t,_,e,"_c"),t._c=new g,void 0!=n&&c(n,y,t[w],t)}),v("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(e){var t="add"==e||"set"==e;e in x&&(!b||"clear"!=e)&&s(_.prototype,e,function(n,r){if(u(this,_,e),!t&&b&&!f(n))return"get"==e&&void 0;var o=this._c[e](0===n?0:n,r);return t?this:o})}),"size"in x&&p(_.prototype,"size",{get:function(){return this._c.size}})):(_=m.getConstructor(t,e,y,w),l(_.prototype,n),i.NEED=!0),d(_,e),j[e]=_,o(o.G+o.W+o.F,j),b||m.setStrong(_,e,y),_}},{"./_an-instance":31,"./_array-methods":35,"./_descriptors":47,"./_export":51,"./_fails":52,"./_for-of":53,"./_global":54,"./_hide":56,"./_is-object":63,"./_meta":72,"./_object-dp":76,"./_redefine-all":88,"./_set-to-string-tag":91}],43:[function(e,t,n){var r=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},{}],44:[function(e,t,n){"use strict";var r=e("./_object-dp"),o=e("./_property-desc");t.exports=function(e,t,n){t in e?r.f(e,t,o(0,n)):e[t]=n}},{"./_object-dp":76,"./_property-desc":87}],45:[function(e,t,n){var r=e("./_a-function");t.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},{"./_a-function":29}],46:[function(e,t,n){t.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},{}],47:[function(e,t,n){t.exports=!e("./_fails")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{"./_fails":52}],48:[function(e,t,n){var r=e("./_is-object"),o=e("./_global").document,i=r(o)&&r(o.createElement);t.exports=function(e){return i?o.createElement(e):{}}},{"./_global":54,"./_is-object":63}],49:[function(e,t,n){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],50:[function(e,t,n){var r=e("./_object-keys"),o=e("./_object-gops"),i=e("./_object-pie");t.exports=function(e){var t=r(e),n=o.f;if(n)for(var a,s=n(e),l=i.f,c=0;s.length>c;)l.call(e,a=s[c++])&&t.push(a);return t}},{"./_object-gops":81,"./_object-keys":84,"./_object-pie":85}],51:[function(e,t,n){var r=e("./_global"),o=e("./_core"),i=e("./_ctx"),a=e("./_hide"),s="prototype",l=function(e,t,n){var c,u,f,d=e&l.F,p=e&l.G,v=e&l.S,h=e&l.P,m=e&l.B,y=e&l.W,b=p?o:o[t]||(o[t]={}),g=b[s],_=p?r:v?r[t]:(r[t]||{})[s];p&&(n=t);for(c in n)u=!d&&_&&void 0!==_[c],u&&c in b||(f=u?_[c]:n[c],b[c]=p&&"function"!=typeof _[c]?n[c]:m&&u?i(f,r):y&&_[c]==f?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[s]=e[s],t}(f):h&&"function"==typeof f?i(Function.call,f):f,h&&((b.virtual||(b.virtual={}))[c]=f,e&l.R&&g&&!g[c]&&a(g,c,f)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,t.exports=l},{"./_core":43,"./_ctx":45,"./_global":54,"./_hide":56}],52:[function(e,t,n){t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],53:[function(e,t,n){var r=e("./_ctx"),o=e("./_iter-call"),i=e("./_is-array-iter"),a=e("./_an-object"),s=e("./_to-length"),l=e("./core.get-iterator-method"),c={},u={},n=t.exports=function(e,t,n,f,d){var p,v,h,m,y=d?function(){return e}:l(e),b=r(n,f,t?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(i(y)){for(p=s(e.length);p>g;g++)if(m=t?b(a(v=e[g])[0],v[1]):b(e[g]),m===c||m===u)return m}else for(h=y.call(e);!(v=h.next()).done;)if(m=o(h,b,v.value,t),m===c||m===u)return m};n.BREAK=c,n.RETURN=u},{"./_an-object":32,"./_ctx":45,"./_is-array-iter":61,"./_iter-call":64,"./_to-length":100,"./core.get-iterator-method":107}],54:[function(e,t,n){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},{}],55:[function(e,t,n){var r={}.hasOwnProperty;t.exports=function(e,t){return r.call(e,t)}},{}],56:[function(e,t,n){var r=e("./_object-dp"),o=e("./_property-desc");t.exports=e("./_descriptors")?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},{"./_descriptors":47,"./_object-dp":76,"./_property-desc":87}],57:[function(e,t,n){t.exports=e("./_global").document&&document.documentElement},{"./_global":54}],58:[function(e,t,n){t.exports=!e("./_descriptors")&&!e("./_fails")(function(){return 7!=Object.defineProperty(e("./_dom-create")("div"),"a",{get:function(){return 7}}).a})},{"./_descriptors":47,"./_dom-create":48,"./_fails":52}],59:[function(e,t,n){t.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},{}],60:[function(e,t,n){var r=e("./_cof");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},{"./_cof":39}],61:[function(e,t,n){var r=e("./_iterators"),o=e("./_wks")("iterator"),i=Array.prototype;t.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},{"./_iterators":69,"./_wks":106}],62:[function(e,t,n){var r=e("./_cof");t.exports=Array.isArray||function(e){return"Array"==r(e)}},{"./_cof":39}],63:[function(e,t,n){t.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},{}],64:[function(e,t,n){var r=e("./_an-object");t.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},{"./_an-object":32}],65:[function(e,t,n){"use strict";var r=e("./_object-create"),o=e("./_property-desc"),i=e("./_set-to-string-tag"),a={};e("./_hide")(a,e("./_wks")("iterator"),function(){return this}),t.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},{"./_hide":56,"./_object-create":75,"./_property-desc":87,"./_set-to-string-tag":91,"./_wks":106}],66:[function(e,t,n){"use strict";var r=e("./_library"),o=e("./_export"),i=e("./_redefine"),a=e("./_hide"),s=e("./_has"),l=e("./_iterators"),c=e("./_iter-create"),u=e("./_set-to-string-tag"),f=e("./_object-gpo"),d=e("./_wks")("iterator"),p=!([].keys&&"next"in[].keys()),v="@@iterator",h="keys",m="values",y=function(){return this};t.exports=function(e,t,n,b,g,_,w){c(n,t,b);var x,j,k,E=function(e){if(!p&&e in T)return T[e];switch(e){case h:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},O=t+" Iterator",S=g==m,A=!1,T=e.prototype,N=T[d]||T[v]||g&&T[g],C=N||E(g),L=g?S?E("entries"):C:void 0,M="Array"==t?T.entries||N:N;if(M&&(k=f(M.call(new e)),k!==Object.prototype&&(u(k,O,!0),r||s(k,d)||a(k,d,y))),S&&N&&N.name!==m&&(A=!0,C=function(){return N.call(this)}),r&&!w||!p&&!A&&T[d]||a(T,d,C),l[t]=C,l[O]=y,g)if(x={values:S?C:E(m),keys:_?C:E(h),entries:L},w)for(j in x)j in T||i(T,j,x[j]);else o(o.P+o.F*(p||A),t,x);return x}},{"./_export":51,"./_has":55,"./_hide":56,"./_iter-create":65,"./_iterators":69,"./_library":71,"./_object-gpo":82,"./_redefine":89,"./_set-to-string-tag":91,"./_wks":106}],67:[function(e,t,n){var r=e("./_wks")("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}t.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},e(i)}catch(e){}return n}},{"./_wks":106}],68:[function(e,t,n){t.exports=function(e,t){return{value:t,done:!!e}}},{}],69:[function(e,t,n){t.exports={}},{}],70:[function(e,t,n){var r=e("./_object-keys"),o=e("./_to-iobject");t.exports=function(e,t){for(var n,i=o(e),a=r(i),s=a.length,l=0;s>l;)if(i[n=a[l++]]===t)return n}},{"./_object-keys":84,"./_to-iobject":99}],71:[function(e,t,n){t.exports=!0},{}],72:[function(e,t,n){var r=e("./_uid")("meta"),o=e("./_is-object"),i=e("./_has"),a=e("./_object-dp").f,s=0,l=Object.isExtensible||function(){return!0},c=!e("./_fails")(function(){return l(Object.preventExtensions({}))}),u=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},f=function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,r)){if(!l(e))return"F";if(!t)return"E";u(e)}return e[r].i},d=function(e,t){if(!i(e,r)){if(!l(e))return!0;if(!t)return!1;u(e)}return e[r].w},p=function(e){return c&&v.NEED&&l(e)&&!i(e,r)&&u(e),e},v=t.exports={KEY:r,NEED:!1,fastKey:f,getWeak:d,onFreeze:p}},{"./_fails":52,"./_has":55,"./_is-object":63,"./_object-dp":76,"./_uid":103}],73:[function(e,t,n){var r=e("./_global"),o=e("./_task").set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,s=r.Promise,l="process"==e("./_cof")(a);t.exports=function(){var e,t,n,c=function(){var r,o;for(l&&(r=a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(l)n=function(){a.nextTick(c)};else if(i){var u=!0,f=document.createTextNode("");new i(c).observe(f,{characterData:!0}),n=function(){f.data=u=!u}}else if(s&&s.resolve){var d=s.resolve();n=function(){d.then(c)}}else n=function(){o.call(r,c)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},{"./_cof":39,"./_global":54,"./_task":96}],74:[function(e,t,n){"use strict";var r=e("./_object-keys"),o=e("./_object-gops"),i=e("./_object-pie"),a=e("./_to-object"),s=e("./_iobject"),l=Object.assign;t.exports=!l||e("./_fails")(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=l({},e)[n]||Object.keys(l({},t)).join("")!=r})?function(e,t){for(var n=a(e),l=arguments.length,c=1,u=o.f,f=i.f;l>c;)for(var d,p=s(arguments[c++]),v=u?r(p).concat(u(p)):r(p),h=v.length,m=0;h>m;)f.call(p,d=v[m++])&&(n[d]=p[d]);return n}:l},{"./_fails":52,"./_iobject":60,"./_object-gops":81,"./_object-keys":84,"./_object-pie":85,"./_to-object":101}],75:[function(e,t,n){var r=e("./_an-object"),o=e("./_object-dps"),i=e("./_enum-bug-keys"),a=e("./_shared-key")("IE_PROTO"),s=function(){},l="prototype",c=function(){var t,n=e("./_dom-create")("iframe"),r=i.length,o="<",a=">";for(n.style.display="none",e("./_html").appendChild(n),n.src="javascript:",t=n.contentWindow.document,t.open(),t.write(o+"script"+a+"document.F=Object"+o+"/script"+a),t.close(),c=t.F;r--;)delete c[l][i[r]];return c()};t.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=r(e),n=new s,s[l]=null,n[a]=e):n=c(),void 0===t?n:o(n,t)}},{"./_an-object":32,"./_dom-create":48,"./_enum-bug-keys":49,"./_html":57,"./_object-dps":77,"./_shared-key":92}],76:[function(e,t,n){var r=e("./_an-object"),o=e("./_ie8-dom-define"),i=e("./_to-primitive"),a=Object.defineProperty;n.f=e("./_descriptors")?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},{"./_an-object":32,"./_descriptors":47,"./_ie8-dom-define":58,"./_to-primitive":102}],77:[function(e,t,n){var r=e("./_object-dp"),o=e("./_an-object"),i=e("./_object-keys");t.exports=e("./_descriptors")?Object.defineProperties:function(e,t){o(e);for(var n,a=i(t),s=a.length,l=0;s>l;)r.f(e,n=a[l++],t[n]);return e}},{"./_an-object":32,"./_descriptors":47,"./_object-dp":76,"./_object-keys":84}],78:[function(e,t,n){var r=e("./_object-pie"),o=e("./_property-desc"),i=e("./_to-iobject"),a=e("./_to-primitive"),s=e("./_has"),l=e("./_ie8-dom-define"),c=Object.getOwnPropertyDescriptor;n.f=e("./_descriptors")?c:function(e,t){if(e=i(e),t=a(t,!0),l)try{return c(e,t)}catch(e){}if(s(e,t))return o(!r.f.call(e,t),e[t])}},{"./_descriptors":47,"./_has":55,"./_ie8-dom-define":58,"./_object-pie":85,"./_property-desc":87,"./_to-iobject":99,"./_to-primitive":102}],79:[function(e,t,n){var r=e("./_to-iobject"),o=e("./_object-gopn").f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return o(e)}catch(e){return a.slice()}};t.exports.f=function(e){return a&&"[object Window]"==i.call(e)?s(e):o(r(e))}},{"./_object-gopn":80,"./_to-iobject":99}],80:[function(e,t,n){var r=e("./_object-keys-internal"),o=e("./_enum-bug-keys").concat("length","prototype");n.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},{"./_enum-bug-keys":49,"./_object-keys-internal":83}],81:[function(e,t,n){n.f=Object.getOwnPropertySymbols},{}],82:[function(e,t,n){var r=e("./_has"),o=e("./_to-object"),i=e("./_shared-key")("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},{"./_has":55,"./_shared-key":92,"./_to-object":101}],83:[function(e,t,n){var r=e("./_has"),o=e("./_to-iobject"),i=e("./_array-includes")(!1),a=e("./_shared-key")("IE_PROTO");t.exports=function(e,t){var n,s=o(e),l=0,c=[];for(n in s)n!=a&&r(s,n)&&c.push(n);for(;t.length>l;)r(s,n=t[l++])&&(~i(c,n)||c.push(n));return c}},{"./_array-includes":34,"./_has":55,"./_shared-key":92,"./_to-iobject":99}],84:[function(e,t,n){var r=e("./_object-keys-internal"),o=e("./_enum-bug-keys");t.exports=Object.keys||function(e){return r(e,o)}},{"./_enum-bug-keys":49,"./_object-keys-internal":83}],85:[function(e,t,n){n.f={}.propertyIsEnumerable},{}],86:[function(e,t,n){var r=e("./_export"),o=e("./_core"),i=e("./_fails");t.exports=function(e,t){var n=(o.Object||{})[e]||Object[e],a={};a[e]=t(n),r(r.S+r.F*i(function(){n(1)}),"Object",a)}},{"./_core":43,"./_export":51,"./_fails":52}],87:[function(e,t,n){t.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},{}],88:[function(e,t,n){var r=e("./_hide");t.exports=function(e,t,n){for(var o in t)n&&e[o]?e[o]=t[o]:r(e,o,t[o]);return e}},{"./_hide":56}],89:[function(e,t,n){t.exports=e("./_hide")},{"./_hide":56}],90:[function(e,t,n){"use strict";var r=e("./_global"),o=e("./_core"),i=e("./_object-dp"),a=e("./_descriptors"),s=e("./_wks")("species");t.exports=function(e){var t="function"==typeof o[e]?o[e]:r[e];a&&t&&!t[s]&&i.f(t,s,{configurable:!0,get:function(){return this}})}},{"./_core":43,"./_descriptors":47,"./_global":54,"./_object-dp":76,"./_wks":106}],91:[function(e,t,n){var r=e("./_object-dp").f,o=e("./_has"),i=e("./_wks")("toStringTag");t.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},{"./_has":55,"./_object-dp":76,"./_wks":106}],92:[function(e,t,n){var r=e("./_shared")("keys"),o=e("./_uid");t.exports=function(e){return r[e]||(r[e]=o(e))}},{"./_shared":93,"./_uid":103}],93:[function(e,t,n){var r=e("./_global"),o="__core-js_shared__",i=r[o]||(r[o]={});t.exports=function(e){return i[e]||(i[e]={})}},{"./_global":54}],94:[function(e,t,n){var r=e("./_an-object"),o=e("./_a-function"),i=e("./_wks")("species");t.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||void 0==(n=r(a)[i])?t:o(n)}},{"./_a-function":29,"./_an-object":32,"./_wks":106}],95:[function(e,t,n){var r=e("./_to-integer"),o=e("./_defined");t.exports=function(e){return function(t,n){var i,a,s=String(o(t)),l=r(n),c=s.length;return l<0||l>=c?e?"":void 0:(i=s.charCodeAt(l),i<55296||i>56319||l+1===c||(a=s.charCodeAt(l+1))<56320||a>57343?e?s.charAt(l):i:e?s.slice(l,l+2):(i-55296<<10)+(a-56320)+65536)}}},{"./_defined":46,"./_to-integer":98}],96:[function(e,t,n){var r,o,i,a=e("./_ctx"),s=e("./_invoke"),l=e("./_html"),c=e("./_dom-create"),u=e("./_global"),f=u.process,d=u.setImmediate,p=u.clearImmediate,v=u.MessageChannel,h=0,m={},y="onreadystatechange",b=function(){var e=+this;if(m.hasOwnProperty(e)){var t=m[e];delete m[e],t()}},g=function(e){b.call(e.data)};d&&p||(d=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return m[++h]=function(){s("function"==typeof e?e:Function(e),t)},r(h),h},p=function(e){delete m[e]},"process"==e("./_cof")(f)?r=function(e){f.nextTick(a(b,e,1))}:v?(o=new v,i=o.port2,o.port1.onmessage=g,r=a(i.postMessage,i,1)):u.addEventListener&&"function"==typeof postMessage&&!u.importScripts?(r=function(e){u.postMessage(e+"","*")},u.addEventListener("message",g,!1)):r=y in c("script")?function(e){l.appendChild(c("script"))[y]=function(){l.removeChild(this),b.call(e)}}:function(e){setTimeout(a(b,e,1),0)}),t.exports={set:d,clear:p}},{"./_cof":39,"./_ctx":45,"./_dom-create":48,"./_global":54,"./_html":57,"./_invoke":59}],97:[function(e,t,n){var r=e("./_to-integer"),o=Math.max,i=Math.min;t.exports=function(e,t){return e=r(e),e<0?o(e+t,0):i(e,t)}},{"./_to-integer":98}],98:[function(e,t,n){var r=Math.ceil,o=Math.floor;t.exports=function(e){return isNaN(e=+e)?0:(e>0?o:r)(e)}},{}],99:[function(e,t,n){var r=e("./_iobject"),o=e("./_defined");t.exports=function(e){return r(o(e))}},{"./_defined":46,"./_iobject":60}],100:[function(e,t,n){var r=e("./_to-integer"),o=Math.min;t.exports=function(e){return e>0?o(r(e),9007199254740991):0}},{"./_to-integer":98}],101:[function(e,t,n){var r=e("./_defined");t.exports=function(e){return Object(r(e))}},{"./_defined":46}],102:[function(e,t,n){var r=e("./_is-object");t.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},{"./_is-object":63}],103:[function(e,t,n){var r=0,o=Math.random();t.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++r+o).toString(36))}},{}],104:[function(e,t,n){var r=e("./_global"),o=e("./_core"),i=e("./_library"),a=e("./_wks-ext"),s=e("./_object-dp").f;t.exports=function(e){var t=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},{"./_core":43,"./_global":54,"./_library":71,"./_object-dp":76,"./_wks-ext":105}],105:[function(e,t,n){n.f=e("./_wks")},{"./_wks":106}],106:[function(e,t,n){var r=e("./_shared")("wks"),o=e("./_uid"),i=e("./_global").Symbol,a="function"==typeof i,s=t.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))};s.store=r},{"./_global":54,"./_shared":93,"./_uid":103}],107:[function(e,t,n){var r=e("./_classof"),o=e("./_wks")("iterator"),i=e("./_iterators");t.exports=e("./_core").getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||i[r(e)]}},{"./_classof":38,"./_core":43,"./_iterators":69,"./_wks":106}],108:[function(e,t,n){var r=e("./_an-object"),o=e("./core.get-iterator-method");t.exports=e("./_core").getIterator=function(e){var t=o(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return r(t.call(e))}},{"./_an-object":32,"./_core":43,"./core.get-iterator-method":107}],109:[function(e,t,n){var r=e("./_classof"),o=e("./_wks")("iterator"),i=e("./_iterators");t.exports=e("./_core").isIterable=function(e){var t=Object(e);return void 0!==t[o]||"@@iterator"in t||i.hasOwnProperty(r(t))}},{"./_classof":38,"./_core":43,"./_iterators":69,"./_wks":106}],110:[function(e,t,n){"use strict";var r=e("./_ctx"),o=e("./_export"),i=e("./_to-object"),a=e("./_iter-call"),s=e("./_is-array-iter"),l=e("./_to-length"),c=e("./_create-property"),u=e("./core.get-iterator-method");o(o.S+o.F*!e("./_iter-detect")(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,o,f,d=i(e),p="function"==typeof this?this:Array,v=arguments.length,h=v>1?arguments[1]:void 0,m=void 0!==h,y=0,b=u(d);if(m&&(h=r(h,v>2?arguments[2]:void 0,2)),void 0==b||p==Array&&s(b))for(t=l(d.length),n=new p(t);t>y;y++)c(n,y,m?h(d[y],y):d[y]);else for(f=b.call(d), n=new p;!(o=f.next()).done;y++)c(n,y,m?a(f,h,[o.value,y],!0):o.value);return n.length=y,n}})},{"./_create-property":44,"./_ctx":45,"./_export":51,"./_is-array-iter":61,"./_iter-call":64,"./_iter-detect":67,"./_to-length":100,"./_to-object":101,"./core.get-iterator-method":107}],111:[function(e,t,n){"use strict";var r=e("./_add-to-unscopables"),o=e("./_iter-step"),i=e("./_iterators"),a=e("./_to-iobject");t.exports=e("./_iter-define")(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,o(1)):"keys"==t?o(0,n):"values"==t?o(0,e[n]):o(0,[n,e[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},{"./_add-to-unscopables":30,"./_iter-define":66,"./_iter-step":68,"./_iterators":69,"./_to-iobject":99}],112:[function(e,t,n){"use strict";var r=e("./_collection-strong");t.exports=e("./_collection")("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(this,e);return t&&t.v},set:function(e,t){return r.def(this,0===e?0:e,t)}},r,!0)},{"./_collection":42,"./_collection-strong":40}],113:[function(e,t,n){var r=e("./_export");r(r.S+r.F,"Object",{assign:e("./_object-assign")})},{"./_export":51,"./_object-assign":74}],114:[function(e,t,n){var r=e("./_export");r(r.S+r.F*!e("./_descriptors"),"Object",{defineProperty:e("./_object-dp").f})},{"./_descriptors":47,"./_export":51,"./_object-dp":76}],115:[function(e,t,n){var r=e("./_to-object"),o=e("./_object-keys");e("./_object-sap")("keys",function(){return function(e){return o(r(e))}})},{"./_object-keys":84,"./_object-sap":86,"./_to-object":101}],116:[function(e,t,n){},{}],117:[function(e,t,n){"use strict";var r,o,i,a=e("./_library"),s=e("./_global"),l=e("./_ctx"),c=e("./_classof"),u=e("./_export"),f=e("./_is-object"),d=e("./_a-function"),p=e("./_an-instance"),v=e("./_for-of"),h=e("./_species-constructor"),m=e("./_task").set,y=e("./_microtask")(),b="Promise",g=s.TypeError,_=s.process,w=s[b],_=s.process,x="process"==c(_),j=function(){},k=!!function(){try{var t=w.resolve(1),n=(t.constructor={})[e("./_wks")("species")]=function(e){e(j,j)};return(x||"function"==typeof PromiseRejectionEvent)&&t.then(j)instanceof n}catch(e){}}(),E=function(e,t){return e===t||e===w&&t===i},O=function(e){var t;return!(!f(e)||"function"!=typeof(t=e.then))&&t},S=function(e){return E(w,e)?new A(e):new o(e)},A=o=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw g("Bad Promise constructor");t=e,n=r}),this.resolve=d(t),this.reject=d(n)},T=function(e){try{e()}catch(e){return{error:e}}},N=function(e,t){if(!e._n){e._n=!0;var n=e._c;y(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,l=t.reject,c=t.domain;try{a?(o||(2==e._h&&M(e),e._h=1),a===!0?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?l(g("Promise-chain cycle")):(i=O(n))?i.call(n,s,l):s(n)):l(r)}catch(e){l(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&C(e)})}},C=function(e){m.call(s,function(){var t,n,r,o=e._v;if(L(e)&&(t=T(function(){x?_.emit("unhandledRejection",o,e):(n=s.onunhandledrejection)?n({promise:e,reason:o}):(r=s.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=x||L(e)?2:1),e._a=void 0,t)throw t.error})},L=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!L(t.promise))return!1;return!0},M=function(e){m.call(s,function(){var t;x?_.emit("rejectionHandled",e):(t=s.onrejectionhandled)&&t({promise:e,reason:e._v})})},P=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),N(t,!0))},F=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw g("Promise can't be resolved itself");(t=O(e))?y(function(){var r={_w:n,_d:!1};try{t.call(e,l(F,r,1),l(P,r,1))}catch(e){P.call(r,e)}}):(n._v=e,n._s=1,N(n,!1))}catch(e){P.call({_w:n,_d:!1},e)}}};k||(w=function(e){p(this,w,b,"_h"),d(e),r.call(this);try{e(l(F,this,1),l(P,this,1))}catch(e){P.call(this,e)}},r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=e("./_redefine-all")(w.prototype,{then:function(e,t){var n=S(h(this,w));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=x?_.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&N(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),A=function(){var e=new r;this.promise=e,this.resolve=l(F,e,1),this.reject=l(P,e,1)}),u(u.G+u.W+u.F*!k,{Promise:w}),e("./_set-to-string-tag")(w,b),e("./_set-species")(b),i=e("./_core")[b],u(u.S+u.F*!k,b,{reject:function(e){var t=S(this),n=t.reject;return n(e),t.promise}}),u(u.S+u.F*(a||!k),b,{resolve:function(e){if(e instanceof w&&E(e.constructor,this))return e;var t=S(this),n=t.resolve;return n(e),t.promise}}),u(u.S+u.F*!(k&&e("./_iter-detect")(function(e){w.all(e).catch(j)})),b,{all:function(e){var t=this,n=S(t),r=n.resolve,o=n.reject,i=T(function(){var n=[],i=0,a=1;v(e,!1,function(e){var s=i++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=S(t),r=n.reject,o=T(function(){v(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}})},{"./_a-function":29,"./_an-instance":31,"./_classof":38,"./_core":43,"./_ctx":45,"./_export":51,"./_for-of":53,"./_global":54,"./_is-object":63,"./_iter-detect":67,"./_library":71,"./_microtask":73,"./_redefine-all":88,"./_set-species":90,"./_set-to-string-tag":91,"./_species-constructor":94,"./_task":96,"./_wks":106}],118:[function(e,t,n){"use strict";var r=e("./_string-at")(!0);e("./_iter-define")(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},{"./_iter-define":66,"./_string-at":95}],119:[function(e,t,n){"use strict";var r=e("./_global"),o=e("./_has"),i=e("./_descriptors"),a=e("./_export"),s=e("./_redefine"),l=e("./_meta").KEY,c=e("./_fails"),u=e("./_shared"),f=e("./_set-to-string-tag"),d=e("./_uid"),p=e("./_wks"),v=e("./_wks-ext"),h=e("./_wks-define"),m=e("./_keyof"),y=e("./_enum-keys"),b=e("./_is-array"),g=e("./_an-object"),_=e("./_to-iobject"),w=e("./_to-primitive"),x=e("./_property-desc"),j=e("./_object-create"),k=e("./_object-gopn-ext"),E=e("./_object-gopd"),O=e("./_object-dp"),S=e("./_object-keys"),A=E.f,T=O.f,N=k.f,C=r.Symbol,L=r.JSON,M=L&&L.stringify,P="prototype",F=p("_hidden"),D=p("toPrimitive"),I={}.propertyIsEnumerable,R=u("symbol-registry"),$=u("symbols"),q=u("op-symbols"),U=Object[P],B="function"==typeof C,H=r.QObject,W=!H||!H[P]||!H[P].findChild,G=i&&c(function(){return 7!=j(T({},"a",{get:function(){return T(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=A(U,t);r&&delete U[t],T(e,t,n),r&&e!==U&&T(U,t,r)}:T,z=function(e){var t=$[e]=j(C[P]);return t._k=e,t},J=B&&"symbol"==typeof C.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof C},Y=function(e,t,n){return e===U&&Y(q,t,n),g(e),t=w(t,!0),g(n),o($,t)?(n.enumerable?(o(e,F)&&e[F][t]&&(e[F][t]=!1),n=j(n,{enumerable:x(0,!1)})):(o(e,F)||T(e,F,x(1,{})),e[F][t]=!0),G(e,t,n)):T(e,t,n)},X=function(e,t){g(e);for(var n,r=y(t=_(t)),o=0,i=r.length;i>o;)Y(e,n=r[o++],t[n]);return e},K=function(e,t){return void 0===t?j(e):X(j(e),t)},V=function(e){var t=I.call(this,e=w(e,!0));return!(this===U&&o($,e)&&!o(q,e))&&(!(t||!o(this,e)||!o($,e)||o(this,F)&&this[F][e])||t)},Q=function(e,t){if(e=_(e),t=w(t,!0),e!==U||!o($,t)||o(q,t)){var n=A(e,t);return!n||!o($,t)||o(e,F)&&e[F][t]||(n.enumerable=!0),n}},Z=function(e){for(var t,n=N(_(e)),r=[],i=0;n.length>i;)o($,t=n[i++])||t==F||t==l||r.push(t);return r},ee=function(e){for(var t,n=e===U,r=N(n?q:_(e)),i=[],a=0;r.length>a;)!o($,t=r[a++])||n&&!o(U,t)||i.push($[t]);return i};B||(C=function(){if(this instanceof C)throw TypeError("Symbol is not a constructor!");var e=d(arguments.length>0?arguments[0]:void 0),t=function(n){this===U&&t.call(q,n),o(this,F)&&o(this[F],e)&&(this[F][e]=!1),G(this,e,x(1,n))};return i&&W&&G(U,e,{configurable:!0,set:t}),z(e)},s(C[P],"toString",function(){return this._k}),E.f=Q,O.f=Y,e("./_object-gopn").f=k.f=Z,e("./_object-pie").f=V,e("./_object-gops").f=ee,i&&!e("./_library")&&s(U,"propertyIsEnumerable",V,!0),v.f=function(e){return z(p(e))}),a(a.G+a.W+a.F*!B,{Symbol:C});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ne=0;te.length>ne;)p(te[ne++]);for(var te=S(p.store),ne=0;te.length>ne;)h(te[ne++]);a(a.S+a.F*!B,"Symbol",{for:function(e){return o(R,e+="")?R[e]:R[e]=C(e)},keyFor:function(e){if(J(e))return m(R,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){W=!0},useSimple:function(){W=!1}}),a(a.S+a.F*!B,"Object",{create:K,defineProperty:Y,defineProperties:X,getOwnPropertyDescriptor:Q,getOwnPropertyNames:Z,getOwnPropertySymbols:ee}),L&&a(a.S+a.F*(!B||c(function(){var e=C();return"[null]"!=M([e])||"{}"!=M({a:e})||"{}"!=M(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!J(e)){for(var t,n,r=[e],o=1;arguments.length>o;)r.push(arguments[o++]);return t=r[1],"function"==typeof t&&(n=t),!n&&b(t)||(t=function(e,t){if(n&&(t=n.call(this,e,t)),!J(t))return t}),r[1]=t,M.apply(L,r)}}}),C[P][D]||e("./_hide")(C[P],D,C[P].valueOf),f(C,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},{"./_an-object":32,"./_descriptors":47,"./_enum-keys":50,"./_export":51,"./_fails":52,"./_global":54,"./_has":55,"./_hide":56,"./_is-array":62,"./_keyof":70,"./_library":71,"./_meta":72,"./_object-create":75,"./_object-dp":76,"./_object-gopd":78,"./_object-gopn":80,"./_object-gopn-ext":79,"./_object-gops":81,"./_object-keys":84,"./_object-pie":85,"./_property-desc":87,"./_redefine":89,"./_set-to-string-tag":91,"./_shared":93,"./_to-iobject":99,"./_to-primitive":102,"./_uid":103,"./_wks":106,"./_wks-define":104,"./_wks-ext":105}],120:[function(e,t,n){var r=e("./_export");r(r.P+r.R,"Map",{toJSON:e("./_collection-to-json")("Map")})},{"./_collection-to-json":41,"./_export":51}],121:[function(e,t,n){e("./_wks-define")("asyncIterator")},{"./_wks-define":104}],122:[function(e,t,n){e("./_wks-define")("observable")},{"./_wks-define":104}],123:[function(e,t,n){e("./es6.array.iterator");for(var r=e("./_global"),o=e("./_hide"),i=e("./_iterators"),a=e("./_wks")("toStringTag"),s=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],l=0;l<5;l++){var c=s[l],u=r[c],f=u&&u.prototype;f&&!f[a]&&o(f,a,c),i[c]=i.Array}},{"./_global":54,"./_hide":56,"./_iterators":69,"./_wks":106,"./es6.array.iterator":111}],124:[function(e,t,n){t.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="dist/",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(57),i=r(o),a=n(53),s=r(a),l=n(56),c=r(l),u=n(48),f=r(u),d=n(54),p=r(d),v=n(55),h=r(v),m=function(){function e(){(0,p.default)(this,e);var t={extension:".lang",location:"assets/lang/",langs:["en-US"],locale:"en-US",preloaded:{}},n=this;n.init=function(e){return n.config=(0,f.default)({},t,e),n.langs=(0,f.default)({},n.config.preloaded),n.locale=n.config.locale||n.config.langs[0],n.setCurrent(n.locale)}}return(0,h.default)(e,[{key:"getValue",value:function(e){return this.current&&this.current[e]||e}},{key:"makeSafe",value:function(e){var t={"{":"\\{","}":"\\}","|":"\\|"};return e=e.replace(/\{|\}|\|/g,function(e){return t[e]}),new RegExp(e,"g")}},{key:"put",value:function(e,t){return this.current[e]=t}},{key:"get",value:function(e,t){var n=this,r=this.getValue(e),o=r.match(/\{[^\}]+?\}/g),i=void 0;if(t&&o)if("object"===("undefined"==typeof t?"undefined":(0,c.default)(t)))for(var a=0;a0&&void 0!==arguments[0]?arguments[0]:"en-US";return i.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.loadLang(t);case 2:return this.locale=t,this.current=this.langs[t],e.abrupt("return",this.current);case 5:case"end":return e.stop()}},e,this)}));return e}()},{key:"getLangs",get:function(){return this.config.langs}}]),e}();t.default=new m},function(e,t,n){var r=n(28)("wks"),o=n(21),i=n(2).Symbol,a="function"==typeof i,s=e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))};s.store=r},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){var n=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(e,t,n){e.exports=!n(12)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,n){var r=n(6),o=n(35),i=n(30),a=Object.defineProperty;t.f=n(4)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(13);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(5),o=n(19);e.exports=n(4)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(36),o=n(23);e.exports=function(e){return r(o(e))}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(2),o=n(3),i=n(16),a=n(8),s="prototype",l=function(e,t,n){var c,u,f,d=e&l.F,p=e&l.G,v=e&l.S,h=e&l.P,m=e&l.B,y=e&l.W,b=p?o:o[t]||(o[t]={}),g=b[s],_=p?r:v?r[t]:(r[t]||{})[s];p&&(n=t);for(c in n)u=!d&&_&&void 0!==_[c],u&&c in b||(f=u?_[c]:n[c],b[c]=p&&"function"!=typeof _[c]?n[c]:m&&u?i(f,r):y&&_[c]==f?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[s]=e[s],t}(f):h&&"function"==typeof f?i(Function.call,f):f,h&&((b.virtual||(b.virtual={}))[c]=f,e&l.R&&g&&!g[c]&&a(g,c,f)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){e.exports={}},function(e,t,n){var r=n(40),o=n(25);e.exports=Object.keys||function(e){return r(e,o)}},function(e,t,n){var r=n(22);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=!0},function(e,t){t.f={}.propertyIsEnumerable},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(5).f,o=n(7),i=n(1)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var r=n(13),o=n(2).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){var r=n(28)("keys"),o=n(21);e.exports=function(e){return r[e]||(r[e]=o(e))}},function(e,t,n){var r=n(2),o="__core-js_shared__",i=r[o]||(r[o]={});e.exports=function(e){return i[e]||(i[e]={})}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(13);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var r=n(2),o=n(3),i=n(17),a=n(32),s=n(5).f;e.exports=function(e){var t=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},function(e,t,n){t.f=n(1)},function(e,t,n){var r=n(10),o=n(1)("toStringTag"),i="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(e){}};e.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),o))?n:i?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},function(e,t,n){e.exports=n(2).document&&document.documentElement},function(e,t,n){e.exports=!n(4)&&!n(12)(function(){return 7!=Object.defineProperty(n(24)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var r=n(10);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){"use strict";var r=n(17),o=n(11),i=n(41),a=n(8),s=n(7),l=n(14),c=n(72),u=n(20),f=n(82),d=n(1)("iterator"),p=!([].keys&&"next"in[].keys()),v="@@iterator",h="keys",m="values",y=function(){return this};e.exports=function(e,t,n,b,g,_,w){c(n,t,b);var x,j,k,E=function(e){if(!p&&e in T)return T[e];switch(e){case h:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},O=t+" Iterator",S=g==m,A=!1,T=e.prototype,N=T[d]||T[v]||g&&T[g],C=N||E(g),L=g?S?E("entries"):C:void 0,M="Array"==t?T.entries||N:N;if(M&&(k=f(M.call(new e)),k!==Object.prototype&&(u(k,O,!0),r||s(k,d)||a(k,d,y))),S&&N&&N.name!==m&&(A=!0,C=function(){return N.call(this)}),r&&!w||!p&&!A&&T[d]||a(T,d,C),l[t]=C,l[O]=y,g)if(x={values:S?C:E(m),keys:_?C:E(h),entries:L},w)for(j in x)j in T||i(T,j,x[j]);else o(o.P+o.F*(p||A),t,x);return x}},function(e,t,n){var r=n(6),o=n(79),i=n(25),a=n(27)("IE_PROTO"),s=function(){},l="prototype",c=function(){var e,t=n(24)("iframe"),r=i.length,o="<",a=">";for(t.style.display="none",n(34).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(o+"script"+a+"document.F=Object"+o+"/script"+a),e.close(),c=e.F;r--;)delete c[l][i[r]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=r(e),n=new s,s[l]=null,n[a]=e):n=c(),void 0===t?n:o(n,t)}},function(e,t,n){var r=n(40),o=n(25).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},function(e,t,n){var r=n(7),o=n(9),i=n(65)(!1),a=n(27)("IE_PROTO");e.exports=function(e,t){var n,s=o(e),l=0,c=[];for(n in s)n!=a&&r(s,n)&&c.push(n);for(;t.length>l;)r(s,n=t[l++])&&(~i(c,n)||c.push(n));return c}},function(e,t,n){e.exports=n(8)},function(e,t,n){var r,o,i,a=n(16),s=n(68),l=n(34),c=n(24),u=n(2),f=u.process,d=u.setImmediate,p=u.clearImmediate,v=u.MessageChannel,h=0,m={},y="onreadystatechange",b=function(){var e=+this;if(m.hasOwnProperty(e)){var t=m[e];delete m[e],t()}},g=function(e){b.call(e.data)};d&&p||(d=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return m[++h]=function(){s("function"==typeof e?e:Function(e),t)},r(h),h},p=function(e){delete m[e]},"process"==n(10)(f)?r=function(e){f.nextTick(a(b,e,1))}:v?(o=new v,i=o.port2,o.port1.onmessage=g,r=a(i.postMessage,i,1)):u.addEventListener&&"function"==typeof postMessage&&!u.importScripts?(r=function(e){u.postMessage(e+"","*")},u.addEventListener("message",g,!1)):r=y in c("script")?function(e){l.appendChild(c("script"))[y]=function(){l.removeChild(this),b.call(e)}}:function(e){setTimeout(a(b,e,1),0)}),e.exports={set:d,clear:p}},function(e,t,n){var r=n(29),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){var r=n(23);e.exports=function(e){return Object(r(e))}},function(e,t){},function(e,t,n){"use strict";var r=n(86)(!0);n(37)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){n(89);for(var r=n(2),o=n(8),i=n(14),a=n(1)("toStringTag"),s=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],l=0;l<5;l++){var c=s[l],u=r[c],f=u&&u.prototype;f&&!f[a]&&o(f,a,c),i[c]=i.Array}},function(e,t,n){e.exports={default:n(58),__esModule:!0}},function(e,t,n){e.exports={default:n(59),__esModule:!0}},function(e,t,n){e.exports={default:n(60),__esModule:!0}},function(e,t,n){e.exports={default:n(61),__esModule:!0}},function(e,t,n){e.exports={default:n(62),__esModule:!0}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var o=n(50),i=r(o);t.default=function(e){return function(){var t=e.apply(this,arguments);return new i.default(function(e,n){function r(o,a){try{var s=t[o](a),l=s.value}catch(e){return void n(e)}return s.done?void e(l):i.default.resolve(l).then(function(e){return r("next",e)},function(e){return r("throw",e)})}return r("next")})}}},function(e,t){"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var o=n(49),i=r(o);t.default=function(){function e(e,t){for(var n=0;nu;)if(s=l[u++],s!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}}},function(e,t,n){var r=n(15),o=n(26),i=n(18);e.exports=function(e){var t=r(e),n=o.f;if(n)for(var a,s=n(e),l=i.f,c=0;s.length>c;)l.call(e,a=s[c++])&&t.push(a);return t}},function(e,t,n){var r=n(16),o=n(71),i=n(69),a=n(6),s=n(43),l=n(88),c={},u={},t=e.exports=function(e,t,n,f,d){var p,v,h,m,y=d?function(){return e}:l(e),b=r(n,f,t?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(i(y)){for(p=s(e.length);p>g;g++)if(m=t?b(a(v=e[g])[0],v[1]):b(e[g]),m===c||m===u)return m}else for(h=y.call(e);!(v=h.next()).done;)if(m=o(h,b,v.value,t),m===c||m===u)return m};t.BREAK=c,t.RETURN=u},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){var r=n(14),o=n(1)("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},function(e,t,n){var r=n(10);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(6);e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},function(e,t,n){"use strict";var r=n(38),o=n(19),i=n(20),a={};n(8)(a,n(1)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},function(e,t,n){var r=n(1)("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},e(i)}catch(e){}return n}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){var r=n(15),o=n(9);e.exports=function(e,t){for(var n,i=o(e),a=r(i),s=a.length,l=0;s>l;)if(i[n=a[l++]]===t)return n}},function(e,t,n){var r=n(21)("meta"),o=n(13),i=n(7),a=n(5).f,s=0,l=Object.isExtensible||function(){return!0},c=!n(12)(function(){return l(Object.preventExtensions({}))}),u=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},f=function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,r)){if(!l(e))return"F";if(!t)return"E";u(e)}return e[r].i},d=function(e,t){if(!i(e,r)){if(!l(e))return!0;if(!t)return!1;u(e)}return e[r].w},p=function(e){return c&&v.NEED&&l(e)&&!i(e,r)&&u(e),e},v=e.exports={KEY:r,NEED:!1,fastKey:f,getWeak:d,onFreeze:p}},function(e,t,n){var r=n(2),o=n(42).set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,s=r.Promise,l="process"==n(10)(a);e.exports=function(){var e,t,n,c=function(){var r,o;for(l&&(r=a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(l)n=function(){a.nextTick(c)};else if(i){var u=!0,f=document.createTextNode("");new i(c).observe(f,{characterData:!0}),n=function(){f.data=u=!u}}else if(s&&s.resolve){var d=s.resolve();n=function(){d.then(c)}}else n=function(){o.call(r,c)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},function(e,t,n){"use strict";var r=n(15),o=n(26),i=n(18),a=n(44),s=n(36),l=Object.assign;e.exports=!l||n(12)(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=l({},e)[n]||Object.keys(l({},t)).join("")!=r})?function(e,t){for(var n=a(e),l=arguments.length,c=1,u=o.f,f=i.f;l>c;)for(var d,p=s(arguments[c++]),v=u?r(p).concat(u(p)):r(p),h=v.length,m=0;h>m;)f.call(p,d=v[m++])&&(n[d]=p[d]);return n}:l},function(e,t,n){var r=n(5),o=n(6),i=n(15);e.exports=n(4)?Object.defineProperties:function(e,t){o(e);for(var n,a=i(t),s=a.length,l=0;s>l;)r.f(e,n=a[l++],t[n]);return e}},function(e,t,n){var r=n(18),o=n(19),i=n(9),a=n(30),s=n(7),l=n(35),c=Object.getOwnPropertyDescriptor;t.f=n(4)?c:function(e,t){if(e=i(e),t=a(t,!0),l)try{return c(e,t)}catch(e){}if(s(e,t))return o(!r.f.call(e,t),e[t])}},function(e,t,n){var r=n(9),o=n(39).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return o(e)}catch(e){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==i.call(e)?s(e):o(r(e))}},function(e,t,n){var r=n(7),o=n(44),i=n(27)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},function(e,t,n){var r=n(8);e.exports=function(e,t,n){for(var o in t)n&&e[o]?e[o]=t[o]:r(e,o,t[o]);return e}},function(e,t,n){"use strict";var r=n(2),o=n(3),i=n(5),a=n(4),s=n(1)("species");e.exports=function(e){var t="function"==typeof o[e]?o[e]:r[e];a&&t&&!t[s]&&i.f(t,s,{configurable:!0,get:function(){return this}})}},function(e,t,n){var r=n(6),o=n(22),i=n(1)("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||void 0==(n=r(a)[i])?t:o(n)}},function(e,t,n){var r=n(29),o=n(23);e.exports=function(e){return function(t,n){var i,a,s=String(o(t)),l=r(n),c=s.length;return l<0||l>=c?e?"":void 0:(i=s.charCodeAt(l),i<55296||i>56319||l+1===c||(a=s.charCodeAt(l+1))<56320||a>57343?e?s.charAt(l):i:e?s.slice(l,l+2):(i-55296<<10)+(a-56320)+65536)}}},function(e,t,n){var r=n(29),o=Math.max,i=Math.min;e.exports=function(e,t){return e=r(e),e<0?o(e+t,0):i(e,t)}},function(e,t,n){var r=n(33),o=n(1)("iterator"),i=n(14);e.exports=n(3).getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||i[r(e)]}},function(e,t,n){"use strict";var r=n(63),o=n(74),i=n(14),a=n(9);e.exports=n(37)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,o(1)):"keys"==t?o(0,n):"values"==t?o(0,e[n]):o(0,[n,e[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},function(e,t,n){var r=n(11);r(r.S+r.F,"Object",{assign:n(78)})},function(e,t,n){var r=n(11);r(r.S+r.F*!n(4),"Object",{defineProperty:n(5).f})},function(e,t,n){"use strict";var r,o,i,a=n(17),s=n(2),l=n(16),c=n(33),u=n(11),f=n(13),d=n(22),p=n(64),v=n(67),h=n(85),m=n(42).set,y=n(77)(),b="Promise",g=s.TypeError,_=s.process,w=s[b],_=s.process,x="process"==c(_),j=function(){},k=!!function(){try{var e=w.resolve(1),t=(e.constructor={})[n(1)("species")]=function(e){e(j,j)};return(x||"function"==typeof PromiseRejectionEvent)&&e.then(j)instanceof t}catch(e){}}(),E=function(e,t){return e===t||e===w&&t===i},O=function(e){var t;return!(!f(e)||"function"!=typeof(t=e.then))&&t},S=function(e){return E(w,e)?new A(e):new o(e)},A=o=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw g("Bad Promise constructor");t=e,n=r}),this.resolve=d(t),this.reject=d(n)},T=function(e){try{e()}catch(e){return{error:e}}},N=function(e,t){if(!e._n){e._n=!0;var n=e._c;y(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,l=t.reject,c=t.domain;try{a?(o||(2==e._h&&M(e),e._h=1),a===!0?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?l(g("Promise-chain cycle")):(i=O(n))?i.call(n,s,l):s(n)):l(r)}catch(e){l(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&C(e)})}},C=function(e){m.call(s,function(){var t,n,r,o=e._v;if(L(e)&&(t=T(function(){x?_.emit("unhandledRejection",o,e):(n=s.onunhandledrejection)?n({promise:e,reason:o}):(r=s.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=x||L(e)?2:1),e._a=void 0,t)throw t.error})},L=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!L(t.promise))return!1;return!0},M=function(e){m.call(s,function(){var t;x?_.emit("rejectionHandled",e):(t=s.onrejectionhandled)&&t({ promise:e,reason:e._v})})},P=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),N(t,!0))},F=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw g("Promise can't be resolved itself");(t=O(e))?y(function(){var r={_w:n,_d:!1};try{t.call(e,l(F,r,1),l(P,r,1))}catch(e){P.call(r,e)}}):(n._v=e,n._s=1,N(n,!1))}catch(e){P.call({_w:n,_d:!1},e)}}};k||(w=function(e){p(this,w,b,"_h"),d(e),r.call(this);try{e(l(F,this,1),l(P,this,1))}catch(e){P.call(this,e)}},r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(83)(w.prototype,{then:function(e,t){var n=S(h(this,w));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=x?_.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&N(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),A=function(){var e=new r;this.promise=e,this.resolve=l(F,e,1),this.reject=l(P,e,1)}),u(u.G+u.W+u.F*!k,{Promise:w}),n(20)(w,b),n(84)(b),i=n(3)[b],u(u.S+u.F*!k,b,{reject:function(e){var t=S(this),n=t.reject;return n(e),t.promise}}),u(u.S+u.F*(a||!k),b,{resolve:function(e){if(e instanceof w&&E(e.constructor,this))return e;var t=S(this),n=t.resolve;return n(e),t.promise}}),u(u.S+u.F*!(k&&n(73)(function(e){w.all(e).catch(j)})),b,{all:function(e){var t=this,n=S(t),r=n.resolve,o=n.reject,i=T(function(){var n=[],i=0,a=1;v(e,!1,function(e){var s=i++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=S(t),r=n.reject,o=T(function(){v(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}})},function(e,t,n){"use strict";var r=n(2),o=n(7),i=n(4),a=n(11),s=n(41),l=n(76).KEY,c=n(12),u=n(28),f=n(20),d=n(21),p=n(1),v=n(32),h=n(31),m=n(75),y=n(66),b=n(70),g=n(6),_=n(9),w=n(30),x=n(19),j=n(38),k=n(81),E=n(80),O=n(5),S=n(15),A=E.f,T=O.f,N=k.f,C=r.Symbol,L=r.JSON,M=L&&L.stringify,P="prototype",F=p("_hidden"),D=p("toPrimitive"),I={}.propertyIsEnumerable,R=u("symbol-registry"),$=u("symbols"),q=u("op-symbols"),U=Object[P],B="function"==typeof C,H=r.QObject,W=!H||!H[P]||!H[P].findChild,G=i&&c(function(){return 7!=j(T({},"a",{get:function(){return T(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=A(U,t);r&&delete U[t],T(e,t,n),r&&e!==U&&T(U,t,r)}:T,z=function(e){var t=$[e]=j(C[P]);return t._k=e,t},J=B&&"symbol"==typeof C.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof C},Y=function(e,t,n){return e===U&&Y(q,t,n),g(e),t=w(t,!0),g(n),o($,t)?(n.enumerable?(o(e,F)&&e[F][t]&&(e[F][t]=!1),n=j(n,{enumerable:x(0,!1)})):(o(e,F)||T(e,F,x(1,{})),e[F][t]=!0),G(e,t,n)):T(e,t,n)},X=function(e,t){g(e);for(var n,r=y(t=_(t)),o=0,i=r.length;i>o;)Y(e,n=r[o++],t[n]);return e},K=function(e,t){return void 0===t?j(e):X(j(e),t)},V=function(e){var t=I.call(this,e=w(e,!0));return!(this===U&&o($,e)&&!o(q,e))&&(!(t||!o(this,e)||!o($,e)||o(this,F)&&this[F][e])||t)},Q=function(e,t){if(e=_(e),t=w(t,!0),e!==U||!o($,t)||o(q,t)){var n=A(e,t);return!n||!o($,t)||o(e,F)&&e[F][t]||(n.enumerable=!0),n}},Z=function(e){for(var t,n=N(_(e)),r=[],i=0;n.length>i;)o($,t=n[i++])||t==F||t==l||r.push(t);return r},ee=function(e){for(var t,n=e===U,r=N(n?q:_(e)),i=[],a=0;r.length>a;)!o($,t=r[a++])||n&&!o(U,t)||i.push($[t]);return i};B||(C=function(){if(this instanceof C)throw TypeError("Symbol is not a constructor!");var e=d(arguments.length>0?arguments[0]:void 0),t=function(n){this===U&&t.call(q,n),o(this,F)&&o(this[F],e)&&(this[F][e]=!1),G(this,e,x(1,n))};return i&&W&&G(U,e,{configurable:!0,set:t}),z(e)},s(C[P],"toString",function(){return this._k}),E.f=Q,O.f=Y,n(39).f=k.f=Z,n(18).f=V,n(26).f=ee,i&&!n(17)&&s(U,"propertyIsEnumerable",V,!0),v.f=function(e){return z(p(e))}),a(a.G+a.W+a.F*!B,{Symbol:C});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ne=0;te.length>ne;)p(te[ne++]);for(var te=S(p.store),ne=0;te.length>ne;)h(te[ne++]);a(a.S+a.F*!B,"Symbol",{for:function(e){return o(R,e+="")?R[e]:R[e]=C(e)},keyFor:function(e){if(J(e))return m(R,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){W=!0},useSimple:function(){W=!1}}),a(a.S+a.F*!B,"Object",{create:K,defineProperty:Y,defineProperties:X,getOwnPropertyDescriptor:Q,getOwnPropertyNames:Z,getOwnPropertySymbols:ee}),L&&a(a.S+a.F*(!B||c(function(){var e=C();return"[null]"!=M([e])||"{}"!=M({a:e})||"{}"!=M(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!J(e)){for(var t,n,r=[e],o=1;arguments.length>o;)r.push(arguments[o++]);return t=r[1],"function"==typeof t&&(n=t),!n&&b(t)||(t=function(e,t){if(n&&(t=n.call(this,e,t)),!J(t))return t}),r[1]=t,M.apply(L,r)}}}),C[P][D]||n(8)(C[P],D,C[P].valueOf),f(C,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},function(e,t,n){n(31)("asyncIterator")},function(e,t,n){n(31)("observable")},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(u===setTimeout)return setTimeout(e,0);if((u===n||!u)&&setTimeout)return u=setTimeout,setTimeout(e,0);try{return u(e,0)}catch(t){try{return u.call(null,e,0)}catch(t){return u.call(this,e,0)}}}function i(e){if(f===clearTimeout)return clearTimeout(e);if((f===r||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(e);try{return f(e)}catch(t){try{return f.call(null,e)}catch(t){return f.call(this,e)}}}function a(){h&&p&&(h=!1,p.length?v=p.concat(v):m=-1,v.length&&s())}function s(){if(!h){var e=o(a);h=!0;for(var t=v.length;t;){for(p=v,v=[];++m1)for(var n=1;n=0,i=o&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,e.exports=n(98),o)r.regeneratorRuntime=i;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}}).call(t,function(){return this}())},function(e,t,n){(function(t,n){!function(t){"use strict";function r(e,t,n,r){var o=Object.create((t||i).prototype),a=new v(r||[]);return o._invoke=f(e,n,a),o}function o(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function i(){}function a(){}function s(){}function l(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function c(e){this.arg=e}function u(e){function t(n,r,i,a){var s=o(e[n],e,r);if("throw"!==s.type){var l=s.arg,u=l.value;return u instanceof c?Promise.resolve(u.arg).then(function(e){t("next",e,i,a)},function(e){t("throw",e,i,a)}):Promise.resolve(u).then(function(e){l.value=e,i(l)},a)}a(s.arg)}function r(e,n){function r(){return new Promise(function(r,o){t(e,n,r,o)})}return i=i?i.then(r,r):r()}"object"==typeof n&&n.domain&&(t=n.domain.bind(t));var i;this._invoke=r}function f(e,t,n){var r=k;return function(i,a){if(r===O)throw new Error("Generator is already running");if(r===S){if("throw"===i)throw a;return m()}for(;;){var s=n.delegate;if(s){if("return"===i||"throw"===i&&s.iterator[i]===y){n.delegate=null;var l=s.iterator.return;if(l){var c=o(l,s.iterator,a);if("throw"===c.type){i="throw",a=c.arg;continue}}if("return"===i)continue}var c=o(s.iterator[i],s.iterator,a);if("throw"===c.type){n.delegate=null,i="throw",a=c.arg;continue}i="next",a=y;var u=c.arg;if(!u.done)return r=E,u;n[s.resultName]=u.value,n.next=s.nextLoc,n.delegate=null}if("next"===i)n.sent=n._sent=a;else if("throw"===i){if(r===k)throw r=S,a;n.dispatchException(a)&&(i="next",a=y)}else"return"===i&&n.abrupt("return",a);r=O;var c=o(e,t,n);if("normal"===c.type){r=n.done?S:E;var u={value:c.arg,done:n.done};if(c.arg!==A)return u;n.delegate&&"next"===i&&(a=y)}else"throw"===c.type&&(r=S,i="throw",a=c.arg)}}}function d(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function p(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function v(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(d,this),this.reset(!0)}function h(e){if(e){var t=e[_];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,r=function t(){for(;++n=0;--r){var o=this.tryEntries[r],i=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var a=b.call(o,"catchLoc"),s=b.call(o,"finallyLoc");if(a&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&b.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),p(n),A}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;p(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:h(e),resultName:t,nextLoc:n},A}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(t,function(){return this}(),n(96))}])},{}],125:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(d===clearTimeout)return clearTimeout(e);if((d===o||!d)&&clearTimeout)return d=clearTimeout,clearTimeout(e);try{return d(e)}catch(t){try{return d.call(null,e)}catch(t){return d.call(this,e)}}}function s(){m&&v&&(m=!1,v.length?h=v.concat(h):y=-1,h.length&&l())}function l(){if(!m){var e=i(s);m=!0;for(var t=h.length;t;){for(v=h,h=[];++y1)for(var n=1;n=0,i=o&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,t.exports=e("./runtime"),o)r.regeneratorRuntime=i;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./runtime":127}],127:[function(e,t,n){(function(e,n){!function(n){"use strict";function r(e,t,n,r){var o=t&&t.prototype instanceof i?t:i,a=Object.create(o.prototype),s=new p(r||[]);return a._invoke=u(e,n,s),a}function o(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function i(){}function a(){}function s(){}function l(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function c(t){function n(e,r,i,a){var s=o(t[e],t,r);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&b.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,i,a)},function(e){n("throw",e,i,a)}):Promise.resolve(c).then(function(e){l.value=e,i(l)},a)}a(s.arg)}function r(e,t){function r(){return new Promise(function(r,o){n(e,t,r,o)})}return i=i?i.then(r,r):r()}"object"==typeof e&&e.domain&&(n=e.domain.bind(n));var i;this._invoke=r}function u(e,t,n){var r=k;return function(i,a){if(r===O)throw new Error("Generator is already running");if(r===S){if("throw"===i)throw a;return h()}for(;;){var s=n.delegate;if(s){if("return"===i||"throw"===i&&s.iterator[i]===m){n.delegate=null;var l=s.iterator.return;if(l){var c=o(l,s.iterator,a);if("throw"===c.type){i="throw",a=c.arg;continue}}if("return"===i)continue}var c=o(s.iterator[i],s.iterator,a);if("throw"===c.type){n.delegate=null,i="throw",a=c.arg;continue}i="next",a=m;var u=c.arg;if(!u.done)return r=E,u;n[s.resultName]=u.value,n.next=s.nextLoc,n.delegate=null}if("next"===i)n.sent=n._sent=a;else if("throw"===i){if(r===k)throw r=S,a;n.dispatchException(a)&&(i="next",a=m)}else"return"===i&&n.abrupt("return",a);r=O;var c=o(e,t,n);if("normal"===c.type){r=n.done?S:E;var u={value:c.arg,done:n.done};if(c.arg!==A)return u;n.delegate&&"next"===i&&(a=m)}else"throw"===c.type&&(r=S,i="throw",a=c.arg)}}}function f(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function d(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function p(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(f,this),this.reset(!0)}function v(e){if(e){var t=e[_];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,r=function t(){for(;++n=0;--r){var o=this.tryEntries[r],i=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var a=b.call(o,"catchLoc"),s=b.call(o,"finallyLoc");if(a&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&b.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),d(n),A}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;d(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:v(e),resultName:t,nextLoc:n},A}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:125}],128:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});n.defaultOptions={controlPosition:"right",append:!1,controlOrder:["autocomplete","button","checkbox","checkbox-group","date","file","header","hidden","paragraph","number","radio-group","select","text","textarea"],dataType:"json",disableFields:[],disabledAttrs:[],disabledActionButtons:[],editOnAdd:!1,defaultFields:[],fields:[],fieldRemoveWarn:!1,inputSets:[],roles:{1:"Administrator"},notify:{error:function(e){return console.error(e)},success:function(e){return console.log(e)},warning:function(e){return console.warn(e)}},onSave:function(e,t){return null},onClearAll:function(){return null},prepend:!1,sortableControls:!1,stickyControls:{enable:!0,offset:{top:5,bottom:"auto",right:"auto"}},templates:{},showActionButtons:!0,typeUserDisabledAttrs:{},typeUserAttrs:{},typeUserEvents:{},prefix:"form-builder-"},n.defaultI18n={location:"https://formbuilder.online/assets/lang/",langs:["en-US"],preloaded:{"en-US":{addOption:"Add Option +",allFieldsRemoved:"All fields were removed.",allowMultipleFiles:"Allow users to upload multiple files",autocomplete:"Autocomplete",button:"Button",cannotBeEmpty:"This field cannot be empty",checkboxGroup:"Checkbox Group",checkbox:"Checkbox",checkboxes:"Checkboxes",className:"Class",clearAllMessage:"Are you sure you want to clear all fields?",clear:"Clear",close:"Close",content:"Content",copy:"Copy To Clipboard",copyButton:"+",copyButtonTooltip:"Copy",dateField:"Date Field",description:"Help Text",descriptionField:"Description",devMode:"Developer Mode",editNames:"Edit Names",editorTitle:"Form Elements",editXML:"Edit XML",enableOther:"Enable "Other"",enableOtherMsg:"Let users to enter an unlisted option",fieldNonEditable:"This field cannot be edited.",fieldRemoveWarning:"Are you sure you want to remove this field?",fileUpload:"File Upload",formUpdated:"Form Updated",getStarted:"Drag a field from the right to this area",header:"Header",hide:"Edit",hidden:"Hidden Input",inline:"Inline",inlineDesc:"Display {type} inline",label:"Label",labelEmpty:"Field Label cannot be empty",limitRole:"Limit access to one or more of the following roles:",mandatory:"Mandatory",maxlength:"Max Length",minOptionMessage:"This field requires a minimum of 2 options",multipleFiles:"Multiple Files",name:"Name",no:"No",noFieldsToClear:"There are no fields to clear",number:"Number",off:"Off",on:"On",option:"Option",options:"Options",optional:"optional",optionLabelPlaceholder:"Label",optionValuePlaceholder:"Value",optionEmpty:"Option value required",other:"Other",paragraph:"Paragraph",placeholder:"Placeholder","placeholder.value":"Value","placeholder.label":"Label","placeholder.text":"","placeholder.textarea":"","placeholder.email":"Enter you email","placeholder.placeholder":"","placeholder.className":"space separated classes","placeholder.password":"Enter your password",preview:"Preview",radioGroup:"Radio Group",radio:"Radio",removeMessage:"Remove Element",removeOption:"Remove Option",remove:"×",required:"Required",richText:"Rich Text Editor",roles:"Access",rows:"Rows",save:"Save",selectOptions:"Options",select:"Select",selectColor:"Select Color",selectionsMessage:"Allow Multiple Selections",size:"Size","size.xs":"Extra Small","size.sm":"Small","size.m":"Default","size.lg":"Large",style:"Style",styles:{btn:{default:"Default",danger:"Danger",info:"Info",primary:"Primary",success:"Success",warning:"Warning"}},subtype:"Type",text:"Text Field",textArea:"Text Area",toggle:"Toggle",warning:"Warning!",value:"Value",viewJSON:"{ }",viewXML:"</>",yes:"Yes"}}},n.config={}},{}],129:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0}),n.availablefields=n.Data=n.instanceData=void 0;var o=e("babel-runtime/helpers/classCallCheck"),i=r(o),a=n.instanceData={};n.Data=function e(t){(0,i.default)(this,e),this.formData={},this.formID=t,this.layout="",a[t]=this},n.availablefields={}},{"babel-runtime/helpers/classCallCheck":12}],130:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0}),n.optionFieldsRegEx=n.optionFields=n.filter=n.empty=n.defaultSubtypes=n.instanceDom=void 0;var o=e("babel-runtime/helpers/classCallCheck"),i=r(o),a=n.instanceDom={},s=n.defaultSubtypes={text:["text","password","email","color","tel"],header:["h1","h2","h3"],button:["button","submit","reset"],paragraph:["p","address","blockquote","canvas","output"],textarea:["textarea","quill"]},l=n.empty=function(e){for(;e.firstChild;)e.removeChild(e.firstChild);return e},c=n.filter=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=[],o=["none","block"];n&&(o=o.reverse());for(var i=e.length-1;i>=0;i--){var a=e[i].textContent.toLowerCase();a.indexOf(t.toLowerCase())!==-1?(e[i].style.display=o[0],r.push(e[i])):e[i].style.display=o[1]}return r},u=n.optionFields=["select","checkbox-group","checkbox","radio-group","autocomplete"],f=n.optionFieldsRegEx=new RegExp("("+u.join("|")+")"),d=function e(t){return(0,i.default)(this,e),this.optionFields=u,this.optionFieldsRegEx=f,this.subtypes=s,this.empty=l,this.filter=c,a[t]=this,a[t]};n.default=d},{"babel-runtime/helpers/classCallCheck":12}],131:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r={};r.loaded=new Event("loaded"),r.viewData=new Event("viewData"),r.userDeclined=new Event("userDeclined"),r.modalClosed=new Event("modalClosed"),r.modalOpened=new Event("modalOpened"),r.formSaved=new Event("formSaved"),r.fieldAdded=new Event("fieldAdded"),r.fieldRemoved=new Event("fieldRemoved"),r.fieldRendered=new Event("fieldRendered"),n.default=r},{}],132:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=e("babel-runtime/core-js/promise"),i=r(o),a=e("babel-runtime/regenerator"),s=r(a),l=e("babel-runtime/helpers/asyncToGenerator"),c=r(l),u=e("babel-runtime/core-js/object/keys"),f=r(u),d=e("babel-runtime/core-js/object/assign"),p=r(d),v=e("babel-runtime/helpers/toConsumableArray"),h=r(v),m=e("babel-runtime/helpers/objectWithoutProperties"),y=r(m),b=e("./dom"),g=r(b),_=e("./data"),w=e("mi18n"),x=r(w),j=e("./utils"),k=r(j),E=e("./events"),O=r(E),S=e("./helpers"),A=r(S),T=e("./config");e("./polyfills.js").default;var N=(new Date).getTime(),C=function e(t,n){function r(e,t){var n=[];for(var r in e)if(e.hasOwnProperty(r)){var a=u[r],s=e[r].value;e[r].value=t[r]||e[r].value||"",e[r].label&&(u[r]=e[r].label),e[r].options?n.push(i(r,e[r])):n.push(o(r,e[r])),u[r]=a,e[r].value=s}return n.join("")}function o(e,t){var n={id:e+"-"+v.lastID,title:t.description||t.label||e.toUpperCase(),name:e,type:t.type||"text",className:["fld-"+e]},r='";k.default.inArray(n.type,["checkbox","checkbox-group","radio-group"])||n.className.push("form-control"),n=(0,p.default)({},t,n);var o="",i='
    '+o+"
    ";return'
    '+r+i+"
    "}function i(e,t){var n=(0,f.default)(t.options).map(function(e){var n={value:e};return e===t.value&&(n.selected=null),""}),r={id:e+"-"+v.lastID,title:t.description||t.label||e.toUpperCase(),name:e,className:"fld-"+e+" form-control"},o='";(0,f.default)(t).filter(function(e){return!k.default.inArray(e,["value","options","label"])}).forEach(function(e){r[e]=t[e]});var i="",a='
    '+i+"
    ";return'
    '+o+a+"
    "}var a=this,l=this,u=x.default.current,d="frmb-"+N++,v=new _.Data(d),m=new g.default(d),b=new A.default(d),w=k.default.markup,j=t;t=b.processOptions(t);var E=T.config.subtypes=b.processSubtypes(t.subtypes);b.editorUI(d);var S=$(m.stage);v.layout=b.editorLayout(t.controlPosition),v.formID=d,v.lastID=v.formID+"-fld-1";var C=b.orderFields(t.fields);t.disableFields&&(C=C.filter(function(e){return!k.default.inArray(e.attrs.type,t.disableFields)})),t.sortableControls&&m.controls.classList.add("sort-enabled");var L=$(m.controls);k.default.forEach(C,function(e){var t=C[e],n=t.attrs,r=t.icon,o=(0,y.default)(t,["attrs","icon"]),i=o.label,a=r?"":"icon-"+(n.name||n.type);r&&(i=''+r+""+o.label);var s=w("li",w("span",i),{className:a+" input-control input-control-"+e});_.availablefields[n.type]=C[e],s.dataset.type=n.type,m.controls.appendChild(s)}),t.inputSets.length&&($("
  • ",{class:"fb-separator"}).html("
    ").appendTo(L),t.inputSets.forEach(function(e,t){e.name=e.name||k.default.makeClassName(e.label);var n=w("li",e.label,{className:"input-set-control input-set-"+t,type:e.name});$(n).appendTo(L)})),S.sortable({cursor:"move",opacity:.9,revert:150,beforeStop:function(e,t){return b.beforeStop.call(b,e,t)},start:function(e,t){return b.startMoving.call(b,e,t)},stop:function(e,t){return b.stopMoving.call(b,e,t)},cancel:"input, select, textarea, .disabled-field, .form-elements, .btn, button",placeholder:"frmb-placeholder"}),L.sortable({helper:"clone",opacity:.9,connectWith:S,cancel:".fb-separator",cursor:"move",scroll:!1,placeholder:"ui-state-highlight",start:function(e,t){return b.startMoving.call(b,e,t)},stop:function(e,t){return b.stopMoving.call(b,e,t)},revert:150,beforeStop:function(e,t){return b.beforeStop.call(b,e,t)},distance:3,update:function(e,n){return!b.doCancel&&void(n.item.parent()[0]===m.stage?(b.doCancel=!0,M(n.item)):(b.setFieldOrder(L),b.doCancel=!t.sortableControls))}});var M=function(e){if(e[0].classList.contains("input-set-control")){var n=[],r=t.inputSets.filter(function(t){return t.name===e[0].type})[0];if(r.showHeader){var o={type:"header",subtype:"h2",id:r.name,label:r.label};n.push(o)}n.push.apply(n,(0,h.default)(r.fields)),n.forEach(function(e){B(e,!0),(b.stopIndex||0===b.stopIndex)&&b.stopIndex++})}else B(e,!0)};m.editorWrap=w("div",null,{id:v.formID+"-form-wrap",className:"form-wrap form-builder"+k.default.mobileClass()});var P=$(m.editorWrap),F=w("div",m.controls,{id:v.formID+"-cb-wrap",className:"cb-wrap "+v.layout.controls});if(t.showActionButtons){var D=t.actionButtons.map(function(e){if(e.id&&t.disabledActionButtons.indexOf(e.id)===-1)return b.processActionButtons(e)}),I=m.formActions=w("div",D,{className:"form-actions btn-group"});F.appendChild(I)}var R=w("div",[m.stage,F],{id:v.formID+"-stage-wrap",className:"stage-wrap "+v.layout.stage});P.append(R,F),"textarea"!==n.type?$(n).append(P):$(n).replaceWith(P);var q=k.default.debounce(function(e){if(e){if("keyup"===e.type&&"className"===e.target.name)return!1;var t=$(e.target).closest(".form-field");b.updatePreview(t),b.save.call(b)}});S.on("change blur keyup",".form-elements input, .form-elements select, .form-elements textarea",q),$("li",m.controls).click(function(e){var t=$(e.target).closest("li");b.stopIndex=void 0,M(t),b.save.call(b)});var U=function(){var e=[],n=function(e){return k.default.markup("li",t[e],{className:"disabled-field form-"+e})};return t.prepend&&!$(".disabled-field.form-prepend",m.stage).length&&(e.push(!0),S.prepend(n("prepend"))), -t.append&&!$(".disabled-field.form-.append",m.stage).length&&(e.push(!0),S.append(n("append"))),b.disabledTT(m.stage),e.some(function(e){return e===!0})},B=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n={};if(e instanceof jQuery){var r=_.availablefields[e[0].dataset.type],o=r.attrs,i=r.label;if(_.availablefields[e[0].dataset.type])n=(0,p.default)({},o),n.label=i;else{var a=e[0].attributes;t||(n.values=e.children().map(function(e,t){return{label:$(t).text(),value:$(t).attr("value"),selected:Boolean($(t).attr("selected"))}}));for(var s=a.length-1;s>=0;s--)n[a[s].name]=a[s].value}}else n=(0,p.default)({},e);n.name||(n.name=k.default.nameAttr(n)),t&&k.default.inArray(n.type,["text","number","file","date","select","textarea","autocomplete"])?n.className=n.className||"form-control":n.className=n.className;var l=/(?:^|\s)btn-(.*?)(?:\s|$)/g.exec(n.className);l&&(n.style=l[1]),k.default.escapeAttrs(n),Z(n,t),t&&document.dispatchEvent(O.default.fieldAdded),R.classList.remove("empty")},H=function(e){if(e=b.getData(e),e&&e.length){for(var n=0;n'+u.selectOptions+""],r=t.multiple||"checkbox-group"===t.type,o=function(e){var n={label:e,value:k.default.hyphenCase(e)};return"autocomplete"!==t.type&&(n.selected=!1),n};if(t.values&&t.values.length)t.values.forEach(function(e){return(0,p.default)({},{selected:!1},e)});else{var i=k.default.inArray(t.type,["checkbox-group","checkbox"])?[1]:[1,2,3];t.values=i.map(function(e){var t=u.option+" "+e;return o(t)});var a=t.values[0];a.hasOwnProperty("selected")&&(a.selected=!0)}return e.push('
    '),e.push('
      '),k.default.forEach(t.values,function(n){e.push(ee(t.name,t.values[n],r))}),e.push("
    "),e.push(k.default.markup("div",n,{className:"option-actions"}).outerHTML),e.push("
    "),k.default.markup("div",e.join(""),{className:"form-group field-options"}).outerHTML},G=function(e){var t=["required","label","description","placeholder","className","name","access","value"],n=["header","paragraph","file","autocomplete"].concat(m.optionFields),r=!k.default.inArray(e,n),o={autocomplete:t.concat(["options"]),button:["label","subtype","style","className","name","value","access"],checkbox:["required","label","description","toggle","inline","className","name","access","other","options"],text:t.concat(["subtype","maxlength"]),date:t,file:t.concat(["multiple"]),header:["label","subtype","className","access"],hidden:["name","value","access"],paragraph:["label","subtype","className","access"],number:t.concat(["min","max","step"]),select:t.concat(["multiple","options"]),textarea:t.concat(["subtype","maxlength","rows"])};o["checkbox-group"]=o.checkbox,o["radio-group"]=o.checkbox;var i=o[e];return"radio-group"===e&&k.default.remove("toggle",i),k.default.inArray(e,["header","paragraph","button"])&&k.default.remove("description",i),r||k.default.remove("value",i),i||t},z=function e(n){var e=[],o=G(n.type),i={required:function(){return Q(n)},toggle:function(){return J("toggle",n,{first:u.toggle})},inline:function(){var e={first:u.inline,second:x.default.get("inlineDesc",n.type.replace("-group",""))};return J("inline",n,e)},label:function(){return V("label",n)},description:function(){return V("description",n)},subtype:function(){return K("subtype",n,E[n.type])},style:function(){return Y(n.style)},placeholder:function(){return V("placeholder",n)},rows:function(){return X("rows",n)},className:function(){return V("className",n)},name:function(){return V("name",n)},value:function(){return V("value",n)},maxlength:function(){return X("maxlength",n)},access:function(){var e=void 0!==n.role?'style="display:block"':"",r=['
    "];for(a in t.roles)if(t.roles.hasOwnProperty(a)){var o=k.default.inArray(a,s)?"checked":"",i="fld-"+v.lastID+"-roles-"+a;r.push('
    ")}r.push("
    ");var l={first:u.roles,second:u.limitRole,content:r.join("")};return J("access",n,l)},other:function(){return J("other",n,{first:u.enableOther,second:u.enableOtherMsg})},options:function(){return W(n)}},a=void 0,s=void 0!==n.role?n.role.split(","):[],l=["min","max","step"];return"number"===n.type&&l.forEach(function(e){i[e]=function(){return X(e,n)}}),"file"===n.type&&(i.multiple=function(){var e={first:u.multipleFiles,second:u.allowMultipleFiles};return J("multiple",n,e)}),"select"===n.type&&(i.multiple=function(){return J("multiple",n,{first:" ",second:u.selectionsMessage})}),(0,f.default)(o).forEach(function(r){var a=o[r],s=[!0];if(t.typeUserDisabledAttrs[n.type]){var l=t.typeUserDisabledAttrs[n.type];s.push(!k.default.inArray(a,l))}if(t.typeUserAttrs[n.type]){var c=(0,f.default)(t.typeUserAttrs[n.type]);s.push(!k.default.inArray(a,c))}k.default.inArray(a,t.disabledAttrs)&&s.push(!1),s.every(function(e){return e===!0})&&e.push(i[a]())}),t.typeUserAttrs[n.type]&&e.push(r(t.typeUserAttrs[n.type],n)),e.join("")},J=function(e,n,r){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var o=function(t){return'"},i=void 0!==n[e]?"checked":"",a=' ',s=[],l=[a];return r.first&&s.unshift(o(r.first)),r.second&&l.push(o(r.second)),r.content&&l.push(r.content),l.unshift('
    '),l.push("
    "),'
    '+s.concat(l).join("")+"
    "}},Y=function(e){var t=u.styles.btn,n="";if(t){var r="";n+='',n+='
    ',(0,f.default)(t).forEach(function(t){var r=["btn-xs","btn","btn-"+t];e===t&&r.push("selected"),n+='"}),n+="
    ",n='
    '+r+" "+n+"
    "}return n},X=function e(n,r){if(!t.typeUserAttrs[r.type]||!t.typeUserAttrs[r.type][n]){var o=r[n],i=u[n]||n,a=u["placeholder."+n],s={type:"number",value:o,name:n,min:"0",placeholder:a,className:"fld-"+n+" form-control",id:n+"-"+v.lastID},e="",l='
    '+e+"
    ";return'
    "+l+"
    "}},K=function(e,n,r){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var o=r.map(function(t,r){var o=(0,p.default)({label:u.option+" "+r,value:void 0},t);return t.value===n[e]&&(o.selected=!0),""}),i={id:e+"-"+v.lastID,name:e,className:"fld-"+e+" form-control"},a='",s="",l='
    '+s+"
    ";return'
    '+a+l+"
    "}},V=function(e,n){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var r=["text","textarea","select","autocomplete"],o=["header","paragraph"],i=["paragraph"],a=n[e]||"",s=u[e];"label"===e&&(k.default.inArray(n.type,i)?s=u.content:a=k.default.parsedHtml(n[e])),E.header&&(o=o.concat(E.header));var l=u["placeholder."+e]||"",c="",f=[];if("placeholder"!==e||k.default.inArray(n.type,r)||f.push(!0),"name"===e&&k.default.inArray(n.type,o)&&f.push(!0),!f.some(function(e){return e===!0})){var d={name:e,placeholder:l,className:"fld-"+e+" form-control",id:e+"-"+v.lastID},p='";"label"===e?c+="
    "+a+"
    ":(d.value=a,d.type="text",c+="");var h='
    '+c+"
    ",m="block";"value"===e&&(m=n.subtype&&"quill"===n.subtype&&"none"),c='
    '+p+" "+h+"
    "}return c}},Q=function(e){var t=["header","paragraph","button"],n=[],r="";return k.default.inArray(e.type,t)&&n.push(!0),n.some(function(e){return e===!0})||(r=J("required",e,{first:u.required})),r},Z=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=e.type||"text",o=e.label||u[r]||u.label,i=w("a",u.remove,{id:"del_"+v.lastID,className:"del-button btn delete-confirm",title:u.removeMessage}),a=w("a",null,{id:v.lastID+"-edit",className:"toggle-form btn icon-pencil",title:u.hide}),s=w("a",null,{id:v.lastID+"-copy",className:"copy-button btn icon-copy",title:u.copyButtonTooltip}),l=w("div",[a,s,i],{className:"field-actions"}).outerHTML;l+='";var c=e.required?'style="display:inline"':"";l+=' *";var f={className:"tooltip-element",tooltip:e.description,style:e.description?"display:inline-block":"display:none"};l+="?",l+=w("div","",{className:"prev-holder"}).outerHTML,l+='
    ',l+='
    ',l+=z(e),l+=w("a",u.close,{className:"close-field"}).outerHTML,l+="
    ",l+="
    ";var d=w("li",l,{class:r+"-field form-field",type:r,id:v.lastID}),p=$(d);p.data("fieldData",{attrs:e}),"undefined"!=typeof b.stopIndex?$("> li",m.stage).eq(b.stopIndex).before(p):S.append(p),$(".sortable-options",p).sortable({update:function(){return b.updatePreview(p)}}),b.updatePreview(p),t.typeUserEvents[r]&&t.typeUserEvents[r].onadd&&t.typeUserEvents[r].onadd(d),t.editOnAdd&&n&&(b.closeAllEdit(),b.toggleEdit(v.lastID,!1)),v.lastID=b.incrementId(v.lastID)},ee=function(e,t,n){var r={selected:n?"checkbox":"radio"},o=["value","label","selected"],i=[],a={selected:!1,label:"",value:""};t=(0,p.default)(a,t);for(var s=o.length-1;s>=0;s--){var l=o[s];if(t.hasOwnProperty(l)){var c={type:r[l]||"text",className:"option-"+l,value:t[l],name:e+"-option"};c.placeholder=u["placeholder."+l]||"","selected"===l&&t.selected===!0&&(c.checked=t.selected),i.push(w("input",null,c))}}var f={className:"remove btn",title:u.removeMessage};i.push(k.default.markup("a",u.remove,f));var d=k.default.markup("li",i);return d.outerHTML},te=function(e){var n=e.attr("id"),r=e.attr("type"),o=(new Date).getTime(),i=r+"-"+o,a=e.clone();return a.find("[id]").each(function(e,t){t.id=t.id.replace(n,v.lastID)}),a.find("[for]").each(function(){this.setAttribute("for",this.getAttribute("for").replace(n,v.lastID))}),a.each(function(){$("e:not(.form-elements)").each(function(){var e=this.getAttribute("name");e=e.substring(0,e.lastIndexOf("-")+1),e+=o.toString(),this.setAttribute("name",e)})}),a.find(".form-elements").find(":input").each(function(){if("name"===this.getAttribute("name")){var e=this.getAttribute("value");e=e.substring(0,e.lastIndexOf("-")+1),e+=o.toString(),this.setAttribute("value",e)}}),a.attr("id",v.lastID),a.attr("name",i),a.addClass("cloned"),$(".sortable-options",a).sortable(),t.typeUserEvents[r]&&t.typeUserEvents[r].onclone&&t.typeUserEvents[r].onclone(a[0]),v.lastID=b.incrementId(v.lastID),a};return S.on("click touchstart",".remove",function(e){var n=$(this).parents(".form-field:eq(0)");e.preventDefault();var r=$(this).parents(".sortable-options:eq(0)").children("li").length;r<=2?t.notify.error("Error: "+u.minOptionMessage):$(this).parent("li").slideUp("250",function(){$(this).remove(),b.updatePreview(n),b.save.call(b)})}),S.on("touchstart","input",function(e){var t=$(this);if(e.handled===!0)return!1;if("checkbox"===t.attr("type"))t.trigger("click");else{t.focus();var n=t.val();t.val(n)}}),S.on("click touchstart",".toggle-form, .close-field",function(e){if(e.stopPropagation(),e.preventDefault(),e.handled===!0)return!1;var t=$(e.target).parents(".form-field:eq(0)").attr("id");b.toggleEdit(t),e.handled=!0}),S.on("change",'[name="subtype"]',function(e){var t=$(e.target).closest("li.form-field"),n=$(".value-wrap",t);n.toggle("quill"!==e.target.value)}),S.on("change",".prev-holder input, .prev-holder select, .prev-holder textarea",function(e){var t=void 0;if(!e.target.classList.contains("other-option")){var n=k.default.closest(e.target,".form-field");if(k.default.inArray(n.type,["select","checkbox-group","radio-group"])){var r=n.getElementsByClassName("option-value");"select"===n.type?k.default.forEach(r,function(t){var n=r[t].parentElement.childNodes[0];n.checked=e.target.value===r[t].value}):(t=document.getElementsByName(e.target.name),k.default.forEach(t,function(e){var n=r[e].parentElement.childNodes[0];n.checked=t[e].checked}))}else{var o=document.getElementById("value-"+n.id);o&&(o.value=e.target.value)}b.save.call(b)}}),k.default.addEventListeners(m.stage,"keyup change",function(e){if(e.target.classList.contains("fld-label")){var t=e.target.value||e.target.innerHTML,n=k.default.closest(e.target,".form-field").querySelector(".field-label");n.innerHTML=k.default.parsedHtml(t)}}),S.on("keyup","input.error",function(e){$(e.target).removeClass("error")}),S.on("keyup",'input[name="description"]',function(e){var t=$(e.target).parents(".form-field:eq(0)"),n=$(".tooltip-element",t),r=$(e.target).val();if(""!==r)if(n.length)n.attr("tooltip",r).css("display","inline-block");else{var o='?';$(".field-label",t).after(o)}else n.length&&n.css("display","none")}),S.on("change",".fld-multiple",function(e){var t=e.target.checked?"checkbox":"radio",n=$(".option-selected",$(e.target).closest(".form-elements"));return n.each(function(e){return n[e].type=t}),t}),S.on("blur","input.fld-name",function(e){e.target.value=k.default.safename(e.target.value),""===e.target.value?$(e.target).addClass("field-error").attr("placeholder",u.cannotBeEmpty):$(e.target).removeClass("field-error")}),S.on("blur","input.fld-maxlength",function(e){e.target.value=k.default.forceNumber(e.target.value)}),S.on("click touchstart",".icon-copy",function(e){e.preventDefault();var t=$(e.target).parent().parent("li"),n=te(t);n.insertAfter(t),b.updatePreview(n),b.save.call(b)}),S.on("click touchstart",".delete-confirm",function(e){e.preventDefault();var n=e.target.getBoundingClientRect(),r=document.body.getBoundingClientRect(),o={pageX:n.left+n.width/2,pageY:n.top-r.top-12},i=$(e.target).parents(".form-field:eq(0)").attr("id"),a=$(document.getElementById(i));if(document.addEventListener("modalClosed",function(){a.removeClass("deleting")},!1),t.fieldRemoveWarn){var s=k.default.markup("h3",u.warning),l=k.default.markup("p",u.fieldRemoveWarning);b.confirm([s,l],function(){return b.removeField(i)},o),a.addClass("deleting")}else b.removeField(i)}),S.on("click",".style-wrap button",function(e){var t=$(e.target),n=t.val(),r=t.parent().prev(".btn-style");r.val(n),t.siblings(".btn").removeClass("selected"),t.addClass("selected"),b.updatePreview(r.closest(".form-field")),b.save.call(b)}),S.on("click",".fld-required",function(e){$(e.target).closest(".form-field").find(".required-asterisk").toggle()}),S.on("click","input.fld-access",function(e){var t=$(e.target).closest(".form-field").find(".available-roles"),n=$(e.target);t.slideToggle(250,function(){n.is(":checked")||$('input[type="checkbox"]',t).removeAttr("checked")})}),S.on("click",".add-opt",function(e){e.preventDefault();var t=$(e.target).closest(".field-options"),n=$('[name="multiple"]',t),r=$(".option-selected:eq(0)",t),o=!1;o=n.length?n.prop("checked"):"checkbox"===r.attr("type");var i=r.attr("name");$(".sortable-options",t).append(ee(i,!1,o))}),S.on("mouseover mouseout",".remove, .del-button",function(e){return $(e.target).closest("li").toggleClass("delete")}),H(),S.css("min-height",L.height()),t.stickyControls.enable&&b.stickyControls(S),document.dispatchEvent(O.default.loaded),l.actions={clearFields:function(e){return b.removeAllFields(m.stage,e)},showData:b.showData.bind(b),save:b.save.bind(b),addField:function(e,t){b.stopIndex=v.formData.length?t:void 0,B(e),document.dispatchEvent(O.default.fieldAdded)},removeField:b.removeField.bind(b),getData:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"js",t=m.stage,n=b,r={js:function(){return n.prepData(t)},xml:function(){return n.xmlSave(t)},json:function(){return window.JSON.stringify(n.prepData(t),null,"\t")}};return r[e]()},setData:function(e){b.removeAllFields(m.stage,!1),H(e)},setLang:function(){var t=(0,c.default)(s.default.mark(function t(r){var o;return s.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,x.default.setCurrent.call(x.default,r);case 2:m.empty(n),o=new e(j,n),$(n).data("formBuilder",o);case 5:case"end":return t.stop()}},t,a)}));return function(e){return t.apply(this,arguments)}}()},l};!function(e){e.fn.formBuilder=function(t){t||(t={});var n=this,r=e.extend({},T.defaultOptions,t,!0),o=r.i18n,a=(0,y.default)(r,["i18n"]);T.config.opts=a;var s=e.extend({},T.defaultI18n,o,!0),l={actions:{getData:null,setData:null,save:null,showData:null,setLang:null,addField:null,removeField:null,clearFields:null},get formData(){return l.actions.getData("json")},promise:new i.default(function(t,r){x.default.init(s).then(function(){n.each(function(t){var r=new C(a,n[t]);e(n[t]).data("formBuilder",r),l.actions=r.actions}),delete l.promise,t(l)}).catch(r)})};return l}}(jQuery)},{"./config":128,"./data":129,"./dom":130,"./events":131,"./helpers":133,"./polyfills.js":134,"./utils":135,"babel-runtime/core-js/object/assign":5,"babel-runtime/core-js/object/keys":7,"babel-runtime/core-js/promise":8,"babel-runtime/helpers/asyncToGenerator":11,"babel-runtime/helpers/objectWithoutProperties":14,"babel-runtime/helpers/toConsumableArray":16,"babel-runtime/regenerator":18,mi18n:124}],133:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0});var o=e("babel-runtime/helpers/objectWithoutProperties"),i=r(o),a=e("babel-runtime/core-js/object/assign"),s=r(a),l=e("babel-runtime/core-js/object/keys"),c=r(l),u=e("babel-runtime/regenerator"),f=r(u),d=e("babel-runtime/helpers/asyncToGenerator"),p=r(d),v=e("babel-runtime/helpers/classCallCheck"),h=r(v),m=e("babel-runtime/helpers/createClass"),y=r(m),b=e("./dom"),g=e("./data"),_=e("./utils"),w=r(_),x=e("./events"),j=r(x),k=e("mi18n"),E=r(k),O=e("./config"),S=O.config.opts,A=w.default.markup,T=function(){function e(t){(0,h.default)(this,e),this.data=g.instanceData[t],this.d=b.instanceDom[t],this.doCancel=!1}return(0,y.default)(e,[{key:"startMoving",value:function(e,t){t.item.show().addClass("moving"),this.doCancel=!0,this.from=t.item.parent()}},{key:"stopMoving",value:function(e,t){var n=this;t.item.removeClass("moving"),n.doCancel&&(t.sender&&$(t.sender).sortable("cancel"),this.from.sortable("cancel")),n.save(),n.doCancel=!1}},{key:"beforeStop",value:function(e,t){var n=this,r=O.config.opts,o=n.d.stage,i=o.childNodes.length-1,a=[];n.stopIndex=t.placeholder.index()-1,!r.sortableControls&&t.item.parent().hasClass("frmb-control")&&a.push(!0),r.prepend&&a.push(0===n.stopIndex),r.append&&a.push(n.stopIndex+1===i),n.doCancel=a.some(function(e){return e===!0})}},{key:"getTypes",value:function(e){var t={type:e.attr("type")},n=$(".fld-subtype",e).val();return n!==t.type&&(t.subtype=n),t}},{key:"fieldOptionData",value:function(e){var t=[];return $(".sortable-options li",e).each(function(){var e=$(this),n=$(".option-selected",e).is(":checked"),r={label:$(".option-label",e).val(),value:$(".option-value",e).val()};n&&(r.selected=n),t.push(r)}),t}},{key:"xmlSave",value:function(e){var t=this.prepData(e),n=["\n\t"];return w.default.forEach(t,function(e,t){var r=null,o=b.optionFieldsRegEx;if(t.type.match(o)){for(var i=t.values,a=[],s=0;s\n"),n.join("")}},{key:"prepData",value:function(e){var t=[],n=this.d,r=this;return 0!==e.childNodes.length&&w.default.forEach(e.childNodes,function(){var e=(0,p.default)(f.default.mark(function e(o,i){var a,s,l,c,u,d,p,v,h,m;return f.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:a=$(i),a.hasClass("disabled-field")||(s=r.getTypes(a),l=$(".roles-field:checked",i).map(function(e){return e.value}).get(),r.setAttrVals(i,s),s.subtype&&("quill"===s.subtype?(c=s.name+"-preview",window.fbEditors.quill[c]&&(u=window.fbEditors.quill[c].instance,d=u.getContents(),s.value=window.JSON.stringify(d.ops))):"tinymce"===s.subtype&&window.tinymce&&(p=s.name+"-preview",window.tinymce.editors[p]&&(v=window.tinymce.editors[p],s.value=v.getContent()))),l.length&&(s.role=l.join(",")),s.className=s.className||s.class,h=/(?:^|\s)btn-(.*?)(?:\s|$)/g.exec(s.className),h&&(s.style=h[1]),s=w.default.trimObj(s),m=s.type.match(n.optionFieldsRegEx),m&&(s.values=r.fieldOptionData(a)),t.push(s));case 2:case"end":return e.stop()}},e,this)}));return function(t,n){return e.apply(this,arguments)}}()),t}},{key:"getData",value:function(e){var t=this.data;if(e||(e=O.config.opts.formData),!e)return!1;var n={xml:function(e){return w.default.parseXML(e)},json:function(e){return window.JSON.parse(e)}};return t.formData=n[O.config.opts.dataType](e)||[],t.formData}},{key:"save",value:function(e){var t=this,n=this.data;e||(e=this.d.stage);var r={xml:function(){return t.xmlSave(e)},json:function(){return window.JSON.stringify(t.prepData(e),null,"\t")}};return n.formData=r[O.config.opts.dataType](e),document.dispatchEvent(j.default.formSaved),n.formData}},{key:"incrementId",value:function(e){var t=e.lastIndexOf("-"),n=parseInt(e.substring(t+1))+1,r=e.substring(0,t);return r+"-"+n}},{key:"setAttrVals",value:function(e,t){var n=e.querySelectorAll('[class*="fld-"]');n.forEach(function(e){var n=void 0,r=w.default.camelCase(e.getAttribute("name"));n=e.attributes.contenteditable?e.innerHTML:"checkbox"===e.type?e.checked:e.value,t[r]=n})}},{key:"updatePreview",value:function(e){var t=this,n=this.d,r=e.attr("class"),o=e[0];if(r.indexOf("input-control")===-1){var i=e.attr("type"),a=$(".prev-holder",o),s={type:i},l=void 0;t.setAttrVals(o,s);var c=$(".btn-style",o).val();c&&(s.style=c),i.match(n.optionFieldsRegEx)&&(s.values=[],s.multiple=$('[name="multiple"]',o).is(":checked"),$(".sortable-options li",o).each(function(e,t){var n={};n.selected=$(".option-selected",t).is(":checked"),n.value=$(".option-value",t).val(),n.label=$(".option-label",t).val(),s.values.push(n)})),s=w.default.trimObj(s),s.className=t.classNames(o,s),$(".fld-className",o).val(s.className),e.data("fieldData",s),l=w.default.getTemplate(s,!0),(0,b.empty)(a[0]),a[0].appendChild(l),l.dispatchEvent(j.default.fieldRendered)}}},{key:"disabledTT",value:function(e){var t=function(e,t){var n=t.field.getBoundingClientRect(),r=e.clientX-n.left-21,o=e.clientY-n.top-t.tt.offsetHeight-12;t.tt.style.transform="translate("+r+"px, "+o+"px)"};e.querySelectorAll(".disabled-field").forEach(function(e){var n=S.messages.fieldNonEditable;if(n){var r=w.default.markup("p",n,{className:"frmb-tt"});e.appendChild(r),e.addEventListener("mousemove",function(n){return t(n,{tt:r,field:e})})}})}},{key:"classNames",value:function(e,t){var n=e.querySelector(".fld-className");if(n){var r=void 0,o=t.type,i=t.style,a=n.value.split(" "),s={button:"btn",submit:"btn"},l=s[o];if(l){if(i){for(r=0;r2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=this,i=E.default.current,a=o.showOverlay(),s=A("button",i.yes,{className:"yes btn btn-success btn-sm"}),l=A("button",i.no,{className:"no btn btn-danger btn-sm"});l.onclick=function(){o.closeConfirm(a)},s.onclick=function(){t(),o.closeConfirm(a)};var c=A("div",[l,s],{className:"button-wrap"});r="form-builder-dialog "+r;var u=A("div",[e,c],{className:r});if(n)u.classList.add("positioned");else{var f=document.documentElement;n={pageX:Math.max(f.clientWidth,window.innerWidth||0)/2,pageY:Math.max(f.clientHeight,window.innerHeight||0)/2},u.style.position="fixed"}return u.style.left=n.pageX+"px",u.style.top=n.pageY+"px",document.body.appendChild(u),s.focus(),u}},{key:"dialog",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=this,o=document.documentElement.clientWidth,i=document.documentElement.clientHeight;r.showOverlay(),n="form-builder-dialog "+n;var a=w.default.markup("div",e,{className:n});return t?a.classList.add("positioned"):(t={pageX:Math.max(o,window.innerWidth||0)/2,pageY:Math.max(i,window.innerHeight||0)/2},a.style.position="fixed"),a.style.left=t.pageX+"px",a.style.top=t.pageY+"px",document.body.appendChild(a),document.dispatchEvent(j.default.modalOpened),n.indexOf("data-dialog")!==-1&&document.dispatchEvent(j.default.viewData),a}},{key:"confirmRemoveAll",value:function(e){var t=this,n=e.target.id.match(/frmb-\d{13}/)[0],r=document.getElementById(n),o=E.default.current,i=$("li.form-field",r),a=e.target.getBoundingClientRect(),s=document.body.getBoundingClientRect(),l={pageX:a.left+a.width/2,pageY:a.top-s.top-12};i.length?t.confirm(o.clearAllMessage,function(){t.removeAllFields.call(t,r),O.config.opts.notify.success(o.allFieldsRemoved),O.config.opts.onClearAll()},l):t.dialog(o.noFieldsToClear,l)}},{key:"removeAllFields",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=E.default.current,o=O.config.opts,i=e.querySelectorAll("li.form-field"),a=[];if(!i.length)return!1;if(o.prepend&&a.push(!0),o.append&&a.push(!0),a.some(function(e){return e===!0})||(e.parentElement.classList.add("empty"),e.parentElement.dataset.content=r.getStarted),t){e.classList.add("removing");var s=0;i.forEach(function(e){return s+=e.offsetHeight+3}),i[0].style.marginTop=-s+"px",setTimeout(function(){(0,b.empty)(e).classList.remove("removing"),n.save(e)},400)}else(0,b.empty)(e),n.save(e)}},{key:"setFieldOrder",value:function(e){if(!O.config.opts.sortableControls)return!1;var t={};e.children().each(function(e,n){t[e]=$(n).data("type")}),window.sessionStorage&&window.sessionStorage.setItem("fieldOrder",window.JSON.stringify(t))}},{key:"orderFields",value:function(e){var t=O.config.opts,n=!1,r=[];if(window.sessionStorage&&(t.sortableControls?n=window.sessionStorage.getItem("fieldOrder"):window.sessionStorage.removeItem("fieldOrder")),n)n=window.JSON.parse(n),n=(0,c.default)(n).map(function(e){return n[e]});else{var o=t.controlOrder.concat(e.map(function(e){return e.attrs.type}));n=w.default.unique(o)}return n.forEach(function(t){var n=e.filter(function(e){return e.attrs.type===t})[0];r.push(n)}),r.filter(Boolean)}},{key:"closeAllEdit",value:function(){var e=this,t=$("> li.editing",e.d.stage),n=$(".toggle-form",e.d.stage),r=$(".frm-holder",t);n.removeClass("open"),t.removeClass("editing"),$(".prev-holder",t).show(),r.hide()}},{key:"toggleEdit",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=document.getElementById(e),r=$(".toggle-form",n),o=$(".frm-holder",n);n.classList.toggle("editing"),r.toggleClass("open"),t?($(".prev-holder",n).slideToggle(250),o.slideToggle(250)):($(".prev-holder",n).toggle(),o.toggle()),this.updatePreview($(n))}},{key:"stickyControls",value:function(){var e=this.d,t=$(e.controls).parent(),n=$(e.stage).parent(),r=t.width(),o=e.controls.getBoundingClientRect();$(window).scroll(function(i){var a=$(i.target).scrollTop(),l={top:5,bottom:"auto",right:"auto",left:o.left},c=(0,s.default)({},l,O.config.opts.stickyControls.offset);if(a>n.offset().top){var u={position:"fixed",width:r},f=(0,s.default)(u,c),d=t.offset(),p=n.offset(),v=d.top+t.height(),h=p.top+n.height();v>h&&d.top!==p.top&&t.css({position:"absolute",top:"auto",bottom:0,right:0,left:"auto"}),(va)&&t.css(f)}else e.controls.parentElement.removeAttribute("style")})}},{key:"showData",value:function(e){var t=this.data,n=w.default.escapeHtml(t.formData),r=A("code",n,{className:"formData-"+O.config.opts.dataType});this.dialog(A("pre",r),null,"data-dialog")}},{key:"removeField",value:function(e){var t=!1,n=this,r=this.d.stage,o=r.getElementsByClassName("form-field");if(!o.length)return console.warn("No fields to remove"),!1;if(!e){var i=[].slice.call(o).map(function(e){return e.id});console.warn("fieldID required to remove specific fields. Removing last field since no ID was supplied."),console.warn("Available IDs: "+i.join(", ")),e=r.lastChild.id}var a=document.getElementById(e),s=$(a);return a?(s.slideUp(250,function(){if(s.removeClass("deleting"),s.remove(),t=!0,n.save(),!r.childNodes.length){var e=r.parentElement;e.classList.add("empty"),e.dataset.content=E.default.current.getStarted}}),document.dispatchEvent(j.default.fieldRemoved),t):(console.warn("Field not found"),!1)}},{key:"processActionButtons",value:function(e){var t=e.label,n=e.events,r=(0,i.default)(e,["label","events"]),o=this.data;t=t?E.default.current[t]||"":r.id?E.default.current[r.id]||w.default.capitalize(r.id):"",r.id?r.id=o.formID+"-"+r.id+"-action":r.id=o.formID+"-action-"+Math.round(1e3*Math.random());var a=A("button",t,r);if(n){var s=function(e){n.hasOwnProperty(e)&&a.addEventListener(e,function(t){return n[e](t)})};for(var l in n)s(l)}return a}},{key:"processSubtypes",value:function(e){var t={},n=function(e){return{label:E.default.get(e),value:e}};O.config.subtypes=w.default.merge(b.defaultSubtypes,e);for(var r in O.config.subtypes)O.config.subtypes.hasOwnProperty(r)&&(t[r]=O.config.subtypes[r].map(n));return t}},{key:"editorUI",value:function(e){var t=this.d,n=this.data;t.stage=A("ul",null,{id:n.formID,className:"frmb"}),t.controls=A("ul",null,{id:n.formID+"-control-box",className:"frmb-control"})}},{key:"processOptions",value:function(e){var t=this,n=e.fields,r=void 0===n?[]:n,o=e.templates,a=(0,i.default)(e,["fields","templates"]),l=[{id:"clear",className:"clear-all btn btn-danger",events:{click:t.confirmRemoveAll.bind(t)}},{label:"viewJSON",id:"data",className:"btn btn-default",events:{click:t.showData.bind(t)}},{id:"save",type:"button",className:"btn btn-primary save-template",events:{click:function(e){t.save(),O.config.opts.onSave(e,t.data.formData)}}}],u=[{label:E.default.get("autocomplete"),attrs:{type:"autocomplete"}},{label:E.default.get("button"),attrs:{type:"button"}},{label:E.default.get("checkboxGroup"),attrs:{type:"checkbox-group"}},{label:E.default.get("dateField"),attrs:{type:"date"}},{label:E.default.get("fileUpload"),attrs:{type:"file"}},{label:E.default.get("header"),attrs:{type:"header"}},{label:E.default.get("hidden"),attrs:{type:"hidden"}},{label:E.default.get("number"),attrs:{type:"number"}},{label:E.default.get("paragraph"),attrs:{type:"paragraph"}},{label:E.default.get("radioGroup"),attrs:{type:"radio-group"}},{ -label:E.default.get("select"),attrs:{type:"select"}},{label:E.default.get("text"),attrs:{type:"text"}},{label:E.default.get("textArea"),attrs:{type:"textarea"}}];a.fields=r.concat(u),O.config.opts=(0,s.default)({},{actionButtons:l,templates:o,fields:r},a);var f=(0,c.default)(O.config.opts.templates).map(function(e){return[e,O.config.opts.templates[e]]});return w.default.templates=w.default.templates.concat(f),O.config.opts}}]),e}();n.default=T},{"./config":128,"./data":129,"./dom":130,"./events":131,"./utils":135,"babel-runtime/core-js/object/assign":5,"babel-runtime/core-js/object/keys":7,"babel-runtime/helpers/asyncToGenerator":11,"babel-runtime/helpers/classCallCheck":12,"babel-runtime/helpers/createClass":13,"babel-runtime/helpers/objectWithoutProperties":14,"babel-runtime/regenerator":18,mi18n:124}],134:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(){"remove"in Element.prototype||(Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)}),"function"!=typeof Event&&!function(){window.Event=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!0),t}}(),"function"!=typeof a.default&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");e=Object(e);for(var t=1;t>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(t=arguments[1]),n=0;n1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=g.contentType(t),o=n.events,i=(0,h.default)(n,["events"]),a=document.createElement(e),s={string:function(e){a.innerHTML+=e},object:function(e){var t=e.tag,n=e.content,r=(0,h.default)(e,["tag","content"]);return a.appendChild(g.markup(t,n,r))},node:function(e){return a.appendChild(e)},array:function(e){for(var t=0;t":">"},n=function(e){return t[e]||e};return"string"==typeof e?e.replace(/["&<>]/g,n):e},g.escapeAttrs=function(e){for(var t in e)e.hasOwnProperty(t)&&(e[t]=g.escapeAttr(e[t]));return e},g.forEach=function(e,t,n){for(var r=0;r-1&&t.splice(n,1)},g.makeLabel=function(e){var t=e.label,n=void 0===t?"":t,r=e.description,o=void 0===r?"":r,i=(0,h.default)(e,["label","description"]),a=g.parsedHtml(n),s=[a];i.required&&s.push(_("span"," *",{className:"fb-required"})),"hidden"!==i.type&&o&&s.push(_("span","?",{className:"tooltip-element",tooltip:o}));var l={className:"fb-"+i.type+"-label"};return i.id&&(l.for=i.id),_("label",s,l)},g.templateMap=function(e){var t=void 0,n=g.templates,r=!0,o=!1,i=void 0;try{for(var a,s=(0,f.default)(n);!(r=(a=s.next()).done);r=!0){var l=a.value,c=(0,p.default)(l,2),u=c[0],d=c[1];if(Array.isArray(u)){if(g.inArray(e,u)){t=d;break}}else if(e===u){t=d;break}}}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return t},g.autocompleteTemplate=function(e){var t=e.values,n=e.type,r=(0,h.default)(e,["values","type"]),o=function(e){var t=e.target.nextSibling.nextSibling,n=t.getElementsByClassName("active-option")[0],r=[[38,function(){n&&n.previousSibling&&(n.classList.remove("active-option"),n=n.previousSibling,n.classList.add("active-option"))}],[40,function(){n?n.nextSibling&&(n.classList.remove("active-option"),n=n.nextSibling,n.classList.add("active-option")):(n=t.firstChild,n.classList.add("active-option"))}],[13,function(){n&&(e.target.value=n.innerHTML,"none"===t.style.display?t.style.display="block":t.style.display="none")}]],o=new c.default(r),i=o.get(e.keyCode);return i||(i=function(){return!1}),i()},i={focus:function(e){var t=e.target.nextSibling.nextSibling;e.target.addEventListener("keydown",o),t.style.display="block",t.style.width=t.parentElement.offsetWidth+"px"},blur:function(e){e.target.removeEventListener("keydown",o),setTimeout(function(){e.target.nextSibling.nextSibling.style.display="none"},200)},input:function(e){var t=e.target.nextSibling.nextSibling;(0,b.filter)(t.querySelectorAll("li"),e.target.value),e.target.value?t.style.display="block":t.style.display="none"}},a=(0,s.default)({},r,{id:r.id+"-input",events:i}),l=(0,s.default)({},r,{type:"hidden"});delete a.name;var u=[_("input",null,a),_("input",null,l)],f=t.map(function(e){var t=e.label,n={events:{click:function(t){var n=t.target.parentElement,r=n.previousSibling.previousSibling;r.value=e.label,r.previousSibling.value=e.value,n.style.display="none"}},value:e.value};return _("li",t,n)});u.push(_("ul",f,{id:r.id+"-list",className:"fb-"+n+"-list"}));var d=function(e){};return{field:u,onRender:d}},g.selectTemplate=function(e,t){var n=[],r=e.values,o=e.type,i=e.inline,a=e.other,l=e.toggle,c=(0,h.default)(e,["values","type","inline","other","toggle"]),u=g.processFieldDataAttrs(c,t),f=o.replace("-group",""),d="select"===o;if(r){u.placeholder&&d&&n.push(_("option",u.placeholder,{disabled:null,selected:null}));for(var p=0;p1&&void 0!==arguments[1]?arguments[1]:"js",n=!1,r=window.fbLoaded[t];return n=Array.isArray(e)?e.every(function(e){return g.inArray(e,r)}):g.inArray(e,r)},g.getStyles=function(e,t){if(!g.isCached(e,"css")){var n=function(e){var t=document.createElement("link");t.type="text/css",t.rel="stylesheet",t.href=e,document.head.appendChild(t),window.fbLoaded.css.push(e)};e.forEach(function(e){return n((t||"")+e)})}},g.longTextTemplate=function(e){var t=e.value,n=void 0===t?"":t,r=(0,h.default)(e,["value"]),o={field:_("textarea",g.parsedHtml(n),r)},i={tinymce:{js:["//cdn.tinymce.com/4/tinymce.min.js"],onRender:function(t){window.tinymce.editors[e.id]&&window.tinymce.editors[e.id].remove(),window.tinymce.init({target:o.field,height:250,plugins:["advlist autolink lists link image charmap print preview anchor","searchreplace visualblocks code fullscreen","insertdatetime media table contextmenu paste code"],toolbar:"insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"})}},quill:{js:["//cdn.quilljs.com/1.1.3/quill.js"],css:["//cdn.quilljs.com/1.1.3/quill.snow.css"],onRender:function(t){var i=window.Quill.import("delta");window.fbEditors.quill[e.id]={};var a=window.fbEditors.quill[e.id];a.instance=new window.Quill(o.field,{modules:{toolbar:[[{header:[1,2,!1]}],["bold","italic","underline"],["code-block"]]},placeholder:r.placeholder||"",theme:"snow"}),a.data=new i,n&&a.instance.setContents(window.JSON.parse(g.parsedHtml(n))),a.instance.on("text-change",function(e){a.data=a.data.compose(e)})}}};"textarea"!==e.type&&(o.onRender=i[e.type].onRender),"quill"===e.type&&(o.field=_("div",null,r));var a=function t(){i[e.type]&&(document.removeEventListener("fieldRendered",t),i[e.type].css&&g.getStyles(i[e.type].css),i[e.type].js&&!g.isCached(i[e.type].js)?g.getScripts(i[e.type].js).done(o.onRender):o.onRender())};return{field:o.field,onRender:a}},g.templates=[["autocomplete",function(e){var t=g.processFieldDataAttrs(e),n=g.makeLabel(e),r=g.autocompleteTemplate(t),o={field:[n,r.field],onRender:r.onRender};return o}],[b.defaultSubtypes.text.concat(["number","file","date"]),function(e){var t=g.processFieldDataAttrs(e),n=g.makeLabel(e),r={field:[n,_("input",null,t)]};return r}],[["paragraph"].concat(b.defaultSubtypes.paragraph),function(e){var t=g.processFieldDataAttrs(e),n={field:[_(e.type,g.parsedHtml(e.label),t)]};return n}],[b.defaultSubtypes.button,function(e){var t=g.processFieldDataAttrs(e),n={field:_("button",e.label,t)};return n}],[["select","checkbox-group","radio-group","checkbox"],function(e){var t=g.makeLabel(e),n=g.selectTemplate(e),r={field:[t,n]};return r}],[["textarea","tinymce","quill"],function(e){var t=g.processFieldDataAttrs(e),n=g.longTextTemplate(t),r=g.makeLabel(e),o={field:[r,n.field],onRender:n.onRender};return o}]],g.processFieldDataAttrs=function(e){var t=(e.label,e.description,e.subtype),n=(0,h.default)(e,["label","description","subtype"]);return n.id||(n.id=n.name),t&&(n.type=t),(n.multiple||"checkbox-group"===n.type)&&(n.name=n.name+"[]"),n.required&&(n.required=!0,n["aria-required"]="true"),n},g.getTemplate=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=void 0;t&&(e.name?e.name=e.name+"-preview":e.name=g.nameAttr(e)+"-preview");var r=g.templateMap(e.type);if(r=r?r(e,t):g.defaultField(e,t)(),"hidden"!==e.type){var o={};e.name&&(o.className="fb-"+e.type+" form-group field-"+e.name),n=g.markup("div",r.field,o)}else{var i=g.processFieldDataAttrs(e);n=g.markup("input",null,i)}return r.onRender&&n.addEventListener("fieldRendered",r.onRender),n},g.otherOptionCB=function(e){var t=document.getElementById(e),n=document.getElementById(e+"-value");t.checked?n.style.display="inline-block":n.style.display="none"},g.capitalize=function(e){return e.replace(/\b\w/g,function(e){return e.toUpperCase()})},g.merge=function(e,t){var n=(0,s.default)({},e,t);for(var r in t)n.hasOwnProperty(r)&&(Array.isArray(t[r])?n[r]=Array.isArray(e[r])?g.unique(e[r].concat(t[r])):t[r]:"object"===(0,y.default)(t[r])?n[r]=g.merge(e[r],t[r]):n[r]=t[r]);return n},g.addEventListeners=function(e,t,n){return t.split(" ").forEach(function(t){return e.addEventListener(t,n,!1)})},g.closest=function(e,t){for(var n=t.replace(".","");(e=e.parentElement)&&!e.classList.contains(n););return e},g.noop=function(){return null},g.debounce=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:250,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=void 0;return function(){for(var o=arguments.length,i=Array(o),a=0;a1&&void 0!==arguments[1]&&arguments[1],n={};if(e instanceof jQuery){var r=_.availablefields[e[0].dataset.type],o=r.attrs,i=r.label;if(_.availablefields[e[0].dataset.type])n=(0,p.default)({},o),n.label=i;else{var a=e[0].attributes;t||(n.values=e.children().map(function(e,t){return{label:$(t).text(),value:$(t).attr("value"),selected:Boolean($(t).attr("selected"))}}));for(var s=a.length-1;s>=0;s--)n[a[s].name]=a[s].value}}else n=(0,p.default)({},e);n.name||(n.name=k.default.nameAttr(n)),t&&k.default.inArray(n.type,["text","number","file","date","select","textarea","autocomplete"])?n.className=n.className||"form-control":n.className=n.className;var l=/(?:^|\s)btn-(.*?)(?:\s|$)/g.exec(n.className);l&&(n.style=l[1]),k.default.escapeAttrs(n),Z(n,t),t&&document.dispatchEvent(O.default.fieldAdded),R.classList.remove("empty")},H=function(e){if(e=b.getData(e),e&&e.length){for(var n=0;n'+u.selectOptions+""],r=t.multiple||"checkbox-group"===t.type,o=function(e){var n={label:e,value:k.default.hyphenCase(e)};return"autocomplete"!==t.type&&(n.selected=!1),n};if(t.values&&t.values.length)t.values.forEach(function(e){return(0,p.default)({},{selected:!1},e)});else{var i=k.default.inArray(t.type,["checkbox-group","checkbox"])?[1]:[1,2,3];t.values=i.map(function(e){var t=u.option+" "+e;return o(t)});var a=t.values[0];a.hasOwnProperty("selected")&&(a.selected=!0)}return e.push('
    '),e.push('
      '),k.default.forEach(t.values,function(n){e.push(ee(t.name,t.values[n],r))}),e.push("
    "),e.push(k.default.markup("div",n,{className:"option-actions"}).outerHTML),e.push("
    "),k.default.markup("div",e.join(""),{className:"form-group field-options"}).outerHTML},G=function(e){var t=["required","label","description","placeholder","className","name","access","value"],n=["header","paragraph","file","autocomplete"].concat(m.optionFields),r=!k.default.inArray(e,n),o={autocomplete:t.concat(["options"]),button:["label","subtype","style","className","name","value","access"],checkbox:["required","label","description","toggle","inline","className","name","access","other","options"],text:t.concat(["subtype","maxlength"]),date:t,file:t.concat(["multiple"]),header:["label","subtype","className","access"],hidden:["name","value","access"],paragraph:["label","subtype","className","access"],number:t.concat(["min","max","step"]),select:t.concat(["multiple","options"]),textarea:t.concat(["subtype","maxlength","rows"])};o["checkbox-group"]=o.checkbox,o["radio-group"]=o.checkbox;var i=o[e];return"radio-group"===e&&k.default.remove("toggle",i),k.default.inArray(e,["header","paragraph","button"])&&k.default.remove("description",i),r||k.default.remove("value",i),i||t},z=function e(n){var e=[],o=G(n.type),i={required:function(){return Q(n)},toggle:function(){return J("toggle",n,{first:u.toggle})},inline:function(){var e={first:u.inline,second:x.default.get("inlineDesc",n.type.replace("-group",""))};return J("inline",n,e)},label:function(){return V("label",n)},description:function(){return V("description",n)},subtype:function(){return K("subtype",n,E[n.type])},style:function(){return Y(n.style)},placeholder:function(){return V("placeholder",n)},rows:function(){return X("rows",n)},className:function(){return V("className",n)},name:function(){return V("name",n)},value:function(){return V("value",n)},maxlength:function(){return X("maxlength",n)},access:function(){var e=void 0!==n.role?'style="display:block"':"",r=['
    "];for(a in t.roles)if(t.roles.hasOwnProperty(a)){var o=k.default.inArray(a,s)?"checked":"",i="fld-"+v.lastID+"-roles-"+a;r.push('
    ")}r.push("
    ");var l={first:u.roles,second:u.limitRole,content:r.join("")};return J("access",n,l)},other:function(){return J("other",n,{first:u.enableOther,second:u.enableOtherMsg})},options:function(){return W(n)}},a=void 0,s=void 0!==n.role?n.role.split(","):[],l=["min","max","step"];return"number"===n.type&&l.forEach(function(e){i[e]=function(){return X(e,n)}}),"file"===n.type&&(i.multiple=function(){var e={first:u.multipleFiles,second:u.allowMultipleFiles};return J("multiple",n,e)}),"select"===n.type&&(i.multiple=function(){return J("multiple",n,{first:" ",second:u.selectionsMessage})}),(0,f.default)(o).forEach(function(r){var a=o[r],s=[!0];if(t.typeUserDisabledAttrs[n.type]){var l=t.typeUserDisabledAttrs[n.type];s.push(!k.default.inArray(a,l))}if(t.typeUserAttrs[n.type]){var c=(0,f.default)(t.typeUserAttrs[n.type]);s.push(!k.default.inArray(a,c))}k.default.inArray(a,t.disabledAttrs)&&s.push(!1),s.every(function(e){return e===!0})&&e.push(i[a]())}),t.typeUserAttrs[n.type]&&e.push(r(t.typeUserAttrs[n.type],n)),e.join("")},J=function(e,n,r){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var o=function(t){return'"},i=n[e]?"checked":"",a=' ',s=[],l=[a];return r.first&&s.unshift(o(r.first)),r.second&&l.push(o(r.second)),r.content&&l.push(r.content),l.unshift('
    '),l.push("
    "),'
    '+s.concat(l).join("")+"
    "}},Y=function(e){var t=u.styles.btn,n="";if(t){var r="";n+='',n+='
    ',(0,f.default)(t).forEach(function(t){var r=["btn-xs","btn","btn-"+t];e===t&&r.push("selected"),n+='"}),n+="
    ",n='
    '+r+" "+n+"
    "}return n},X=function e(n,r){if(!t.typeUserAttrs[r.type]||!t.typeUserAttrs[r.type][n]){var o=r[n],i=u[n]||n,a=u["placeholder."+n],s={type:"number",value:o,name:n,min:"0",placeholder:a,className:"fld-"+n+" form-control",id:n+"-"+v.lastID},e="",l='
    '+e+"
    ";return'
    "+l+"
    "}},K=function(e,n,r){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var o=r.map(function(t,r){var o=(0,p.default)({label:u.option+" "+r,value:void 0},t);return t.value===n[e]&&(o.selected=!0),""}),i={id:e+"-"+v.lastID,name:e,className:"fld-"+e+" form-control"},a='",s="",l='
    '+s+"
    ";return'
    '+a+l+"
    "}},V=function(e,n){if(!t.typeUserAttrs[n.type]||!t.typeUserAttrs[n.type][e]){var r=["text","textarea","select","autocomplete"],o=["header","paragraph"],i=["paragraph"],a=n[e]||"",s=u[e];"label"===e&&(k.default.inArray(n.type,i)?s=u.content:a=k.default.parsedHtml(n[e])),E.header&&(o=o.concat(E.header));var l=u["placeholder."+e]||"",c="",f=[];if("placeholder"!==e||k.default.inArray(n.type,r)||f.push(!0),"name"===e&&k.default.inArray(n.type,o)&&f.push(!0),!f.some(function(e){return e===!0})){var d={name:e,placeholder:l,className:"fld-"+e+" form-control",id:e+"-"+v.lastID},p='";"label"===e?c+="
    "+a+"
    ":(d.value=a,d.type="text",c+="");var h='
    '+c+"
    ",m="block";"value"===e&&(m=n.subtype&&"quill"===n.subtype&&"none"),c='
    '+p+" "+h+"
    "}return c}},Q=function(e){var t=["header","paragraph","button"],n=[],r="";return k.default.inArray(e.type,t)&&n.push(!0),n.some(function(e){return e===!0})||(r=J("required",e,{first:u.required})),r},Z=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=e.type||"text",o=e.label||u[r]||u.label,i=w("a",u.remove,{id:"del_"+v.lastID,className:"del-button btn delete-confirm",title:u.removeMessage}),a=w("a",null,{id:v.lastID+"-edit",className:"toggle-form btn icon-pencil",title:u.hide}),s=w("a",null,{id:v.lastID+"-copy",className:"copy-button btn icon-copy",title:u.copyButtonTooltip}),l=w("div",[a,s,i],{className:"field-actions"}).outerHTML;l+='";var c=e.required?'style="display:inline"':"";l+=' *";var f={className:"tooltip-element",tooltip:e.description,style:e.description?"display:inline-block":"display:none"};l+="?",l+=w("div","",{className:"prev-holder"}).outerHTML,l+='
    ',l+='
    ',l+=z(e),l+=w("a",u.close,{className:"close-field"}).outerHTML,l+="
    ",l+="
    ";var d=w("li",l,{class:r+"-field form-field",type:r,id:v.lastID}),p=$(d);p.data("fieldData",{attrs:e}),"undefined"!=typeof b.stopIndex?$("> li",m.stage).eq(b.stopIndex).before(p):S.append(p),$(".sortable-options",p).sortable({update:function(){return b.updatePreview(p)}}),b.updatePreview(p),t.typeUserEvents[r]&&t.typeUserEvents[r].onadd&&t.typeUserEvents[r].onadd(d),t.editOnAdd&&n&&(b.closeAllEdit(),b.toggleEdit(v.lastID,!1)),v.lastID=b.incrementId(v.lastID)},ee=function(e,t,n){var r={selected:n?"checkbox":"radio"},o=["value","label","selected"],i=[],a={selected:!1,label:"",value:""};t=(0,p.default)(a,t);for(var s=o.length-1;s>=0;s--){var l=o[s];if(t.hasOwnProperty(l)){var c={type:r[l]||"text",className:"option-"+l,value:t[l],name:e+"-option"};c.placeholder=u["placeholder."+l]||"","selected"===l&&t.selected===!0&&(c.checked=t.selected),i.push(w("input",null,c))}}var f={className:"remove btn",title:u.removeMessage};i.push(k.default.markup("a",u.remove,f));var d=k.default.markup("li",i);return d.outerHTML},te=function(e){var n=e.attr("id"),r=e.attr("type"),o=(new Date).getTime(),i=r+"-"+o,a=e.clone();return a.find("[id]").each(function(e,t){t.id=t.id.replace(n,v.lastID)}),a.find("[for]").each(function(){this.setAttribute("for",this.getAttribute("for").replace(n,v.lastID))}),a.each(function(){$("e:not(.form-elements)").each(function(){var e=this.getAttribute("name");e=e.substring(0,e.lastIndexOf("-")+1),e+=o.toString(),this.setAttribute("name",e)})}),a.find(".form-elements").find(":input").each(function(){if("name"===this.getAttribute("name")){var e=this.getAttribute("value");e=e.substring(0,e.lastIndexOf("-")+1),e+=o.toString(),this.setAttribute("value",e)}}),a.attr("id",v.lastID),a.attr("name",i),a.addClass("cloned"),$(".sortable-options",a).sortable(),t.typeUserEvents[r]&&t.typeUserEvents[r].onclone&&t.typeUserEvents[r].onclone(a[0]),v.lastID=b.incrementId(v.lastID),a};return S.on("click touchstart",".remove",function(e){var n=$(this).parents(".form-field:eq(0)");e.preventDefault();var r=$(this).parents(".sortable-options:eq(0)").children("li").length;r<=2?t.notify.error("Error: "+u.minOptionMessage):$(this).parent("li").slideUp("250",function(){$(this).remove(),b.updatePreview(n),b.save.call(b)})}),S.on("touchstart","input",function(e){var t=$(this);if(e.handled===!0)return!1;if("checkbox"===t.attr("type"))t.trigger("click");else{t.focus();var n=t.val();t.val(n)}}),S.on("click touchstart",".toggle-form, .close-field",function(e){if(e.stopPropagation(),e.preventDefault(),e.handled===!0)return!1;var t=$(e.target).parents(".form-field:eq(0)").attr("id");b.toggleEdit(t),e.handled=!0}),S.on("change",'[name="subtype"]',function(e){var t=$(e.target).closest("li.form-field"),n=$(".value-wrap",t);n.toggle("quill"!==e.target.value)}),S.on("change",".prev-holder input, .prev-holder select, .prev-holder textarea",function(e){var t=void 0;if(!e.target.classList.contains("other-option")){var n=k.default.closest(e.target,".form-field");if(k.default.inArray(n.type,["select","checkbox-group","radio-group"])){var r=n.getElementsByClassName("option-value");"select"===n.type?k.default.forEach(r,function(t){var n=r[t].parentElement.childNodes[0];n.checked=e.target.value===r[t].value}):(t=document.getElementsByName(e.target.name),k.default.forEach(t,function(e){var n=r[e].parentElement.childNodes[0];n.checked=t[e].checked}))}else{var o=document.getElementById("value-"+n.id);o&&(o.value=e.target.value)}b.save.call(b)}}),k.default.addEventListeners(m.stage,"keyup change",function(e){if(e.target.classList.contains("fld-label")){var t=e.target.value||e.target.innerHTML,n=k.default.closest(e.target,".form-field").querySelector(".field-label");n.innerHTML=k.default.parsedHtml(t)}}),S.on("keyup","input.error",function(e){$(e.target).removeClass("error")}),S.on("keyup",'input[name="description"]',function(e){var t=$(e.target).parents(".form-field:eq(0)"),n=$(".tooltip-element",t),r=$(e.target).val();if(""!==r)if(n.length)n.attr("tooltip",r).css("display","inline-block");else{var o='?';$(".field-label",t).after(o)}else n.length&&n.css("display","none")}),S.on("change",".fld-multiple",function(e){var t=e.target.checked?"checkbox":"radio",n=$(".option-selected",$(e.target).closest(".form-elements"));return n.each(function(e){return n[e].type=t}),t}),S.on("blur","input.fld-name",function(e){e.target.value=k.default.safename(e.target.value),""===e.target.value?$(e.target).addClass("field-error").attr("placeholder",u.cannotBeEmpty):$(e.target).removeClass("field-error")}),S.on("blur","input.fld-maxlength",function(e){e.target.value=k.default.forceNumber(e.target.value)}),S.on("click touchstart",".icon-copy",function(e){e.preventDefault();var t=$(e.target).parent().parent("li"),n=te(t);n.insertAfter(t),b.updatePreview(n),b.save.call(b)}),S.on("click touchstart",".delete-confirm",function(e){e.preventDefault();var n=e.target.getBoundingClientRect(),r=document.body.getBoundingClientRect(),o={pageX:n.left+n.width/2,pageY:n.top-r.top-12},i=$(e.target).parents(".form-field:eq(0)").attr("id"),a=$(document.getElementById(i));if(document.addEventListener("modalClosed",function(){a.removeClass("deleting")},!1),t.fieldRemoveWarn){var s=k.default.markup("h3",u.warning),l=k.default.markup("p",u.fieldRemoveWarning);b.confirm([s,l],function(){return b.removeField(i)},o),a.addClass("deleting")}else b.removeField(i)}),S.on("click",".style-wrap button",function(e){var t=$(e.target),n=t.val(),r=t.parent().prev(".btn-style");r.val(n),t.siblings(".btn").removeClass("selected"),t.addClass("selected"),b.updatePreview(r.closest(".form-field")),b.save.call(b)}),S.on("click",".fld-required",function(e){$(e.target).closest(".form-field").find(".required-asterisk").toggle()}),S.on("click","input.fld-access",function(e){var t=$(e.target).closest(".form-field").find(".available-roles"),n=$(e.target);t.slideToggle(250,function(){n.is(":checked")||$('input[type="checkbox"]',t).removeAttr("checked")})}),S.on("click",".add-opt",function(e){e.preventDefault();var t=$(e.target).closest(".field-options"),n=$('[name="multiple"]',t),r=$(".option-selected:eq(0)",t),o=!1;o=n.length?n.prop("checked"):"checkbox"===r.attr("type");var i=r.attr("name");$(".sortable-options",t).append(ee(i,!1,o))}),S.on("mouseover mouseout",".remove, .del-button",function(e){return $(e.target).closest("li").toggleClass("delete")}),H(),S.css("min-height",L.height()),t.stickyControls.enable&&b.stickyControls(S),document.dispatchEvent(O.default.loaded),l.actions={clearFields:function(e){return b.removeAllFields(m.stage,e)},showData:b.showData.bind(b),save:b.save.bind(b),addField:function(e,t){b.stopIndex=v.formData.length?t:void 0,B(e),document.dispatchEvent(O.default.fieldAdded)},removeField:b.removeField.bind(b),getData:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"js",t=m.stage,n=b,r={js:function(){return n.prepData(t)},xml:function(){return n.xmlSave(t)},json:function(){return window.JSON.stringify(n.prepData(t),null,"\t")}};return r[e]()},setData:function(e){b.removeAllFields(m.stage,!1),H(e)},setLang:function(){var t=(0,c.default)(s.default.mark(function t(r){var o;return s.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,x.default.setCurrent.call(x.default,r);case 2:m.empty(n),o=new e(j,n),$(n).data("formBuilder",o);case 5:case"end":return t.stop()}},t,a)}));return function(e){return t.apply(this,arguments)}}()},l};!function(e){e.fn.formBuilder=function(t){t||(t={});var n=this,r=e.extend({},T.defaultOptions,t,!0),o=r.i18n,a=(0,y.default)(r,["i18n"]);T.config.opts=a;var s=e.extend({},T.defaultI18n,o,!0),l={actions:{getData:null,setData:null,save:null,showData:null,setLang:null,addField:null,removeField:null,clearFields:null},get formData(){return l.actions.getData("json")},promise:new i.default(function(t,r){x.default.init(s).then(function(){n.each(function(t){var r=new C(a,n[t]);e(n[t]).data("formBuilder",r),l.actions=r.actions}),delete l.promise,t(l)}).catch(r)})};return l}}(jQuery)},{"./config":128,"./data":129,"./dom":130,"./events":131,"./helpers":133,"./polyfills.js":134,"./utils":135,"babel-runtime/core-js/object/assign":5,"babel-runtime/core-js/object/keys":7,"babel-runtime/core-js/promise":8,"babel-runtime/helpers/asyncToGenerator":11,"babel-runtime/helpers/objectWithoutProperties":14,"babel-runtime/helpers/toConsumableArray":16,"babel-runtime/regenerator":18,mi18n:124}],133:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0});var o=e("babel-runtime/helpers/objectWithoutProperties"),i=r(o),a=e("babel-runtime/core-js/object/assign"),s=r(a),l=e("babel-runtime/core-js/object/keys"),c=r(l),u=e("babel-runtime/regenerator"),f=r(u),d=e("babel-runtime/helpers/asyncToGenerator"),p=r(d),v=e("babel-runtime/helpers/classCallCheck"),h=r(v),m=e("babel-runtime/helpers/createClass"),y=r(m),b=e("./dom"),g=e("./data"),_=e("./utils"),w=r(_),x=e("./events"),j=r(x),k=e("mi18n"),E=r(k),O=e("./config"),S=O.config.opts,A=w.default.markup,T=function(){function e(t){(0,h.default)(this,e),this.data=g.instanceData[t],this.d=b.instanceDom[t],this.doCancel=!1}return(0,y.default)(e,[{key:"startMoving",value:function(e,t){t.item.show().addClass("moving"),this.doCancel=!0,this.from=t.item.parent()}},{key:"stopMoving",value:function(e,t){var n=this;t.item.removeClass("moving"),n.doCancel&&(t.sender&&$(t.sender).sortable("cancel"),this.from.sortable("cancel")),n.save(),n.doCancel=!1}},{key:"beforeStop",value:function(e,t){var n=this,r=O.config.opts,o=n.d.stage,i=o.childNodes.length-1,a=[];n.stopIndex=t.placeholder.index()-1,!r.sortableControls&&t.item.parent().hasClass("frmb-control")&&a.push(!0),r.prepend&&a.push(0===n.stopIndex),r.append&&a.push(n.stopIndex+1===i),n.doCancel=a.some(function(e){return e===!0})}},{key:"getTypes",value:function(e){var t={type:e.attr("type")},n=$(".fld-subtype",e).val();return n!==t.type&&(t.subtype=n),t}},{key:"fieldOptionData",value:function(e){var t=[];return $(".sortable-options li",e).each(function(){var e=$(this),n=$(".option-selected",e).is(":checked"),r={label:$(".option-label",e).val(),value:$(".option-value",e).val()};n&&(r.selected=n),t.push(r)}),t}},{key:"xmlSave",value:function(e){var t=this.prepData(e),n=["\n\t"];return w.default.forEach(t,function(e,t){var r=null,o=b.optionFieldsRegEx;if(t.type.match(o)){for(var i=t.values,a=[],s=0;s\n"),n.join("")}},{key:"prepData",value:function(e){var t=[],n=this.d,r=this;return 0!==e.childNodes.length&&w.default.forEach(e.childNodes,function(){var e=(0,p.default)(f.default.mark(function e(o,i){var a,s,l,c,u,d,p,v,h,m;return f.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:a=$(i),a.hasClass("disabled-field")||(s=r.getTypes(a),l=$(".roles-field:checked",i).map(function(e){return e.value}).get(),r.setAttrVals(i,s),s.subtype&&("quill"===s.subtype?(c=s.name+"-preview",window.fbEditors.quill[c]&&(u=window.fbEditors.quill[c].instance,d=u.getContents(),s.value=window.JSON.stringify(d.ops))):"tinymce"===s.subtype&&window.tinymce&&(p=s.name+"-preview",window.tinymce.editors[p]&&(v=window.tinymce.editors[p],s.value=v.getContent()))),l.length&&(s.role=l.join(",")),s.className=s.className||s.class,h=/(?:^|\s)btn-(.*?)(?:\s|$)/g.exec(s.className),h&&(s.style=h[1]),s=w.default.trimObj(s),m=s.type.match(n.optionFieldsRegEx),m&&(s.values=r.fieldOptionData(a)),t.push(s));case 2:case"end":return e.stop()}},e,this)}));return function(t,n){return e.apply(this,arguments)}}()),t}},{key:"getData",value:function(e){var t=this.data;if(e||(e=O.config.opts.formData),!e)return!1;var n={xml:function(e){return w.default.parseXML(e)},json:function(e){return window.JSON.parse(e)}};return t.formData=n[O.config.opts.dataType](e)||[],t.formData}},{key:"save",value:function(e){var t=this,n=this.data;e||(e=this.d.stage);var r={xml:function(){return t.xmlSave(e)},json:function(){return window.JSON.stringify(t.prepData(e),null,"\t")}};return n.formData=r[O.config.opts.dataType](e),document.dispatchEvent(j.default.formSaved),n.formData}},{key:"incrementId",value:function(e){var t=e.lastIndexOf("-"),n=parseInt(e.substring(t+1))+1,r=e.substring(0,t);return r+"-"+n}},{key:"setAttrVals",value:function(e,t){var n=e.querySelectorAll('[class*="fld-"]');n.forEach(function(e){var n=void 0,r=w.default.camelCase(e.getAttribute("name"));n=e.attributes.contenteditable?e.innerHTML:"checkbox"===e.type?e.checked:e.value,t[r]=n})}},{key:"updatePreview",value:function(e){var t=this,n=this.d,r=e.attr("class"),o=e[0];if(r.indexOf("input-control")===-1){var i=e.attr("type"),a=$(".prev-holder",o),s={type:i},l=void 0;t.setAttrVals(o,s);var c=$(".btn-style",o).val();c&&(s.style=c),i.match(n.optionFieldsRegEx)&&(s.values=[],s.multiple=$('[name="multiple"]',o).is(":checked"),$(".sortable-options li",o).each(function(e,t){var n={};n.selected=$(".option-selected",t).is(":checked"),n.value=$(".option-value",t).val(),n.label=$(".option-label",t).val(),s.values.push(n)})),s=w.default.trimObj(s),s.className=t.classNames(o,s),$(".fld-className",o).val(s.className),e.data("fieldData",s),l=w.default.getTemplate(s,!0),(0,b.empty)(a[0]),a[0].appendChild(l),l.dispatchEvent(j.default.fieldRendered)}}},{key:"disabledTT",value:function(e){var t=function(e,t){var n=t.field.getBoundingClientRect(),r=e.clientX-n.left-21,o=e.clientY-n.top-t.tt.offsetHeight-12;t.tt.style.transform="translate("+r+"px, "+o+"px)"};e.querySelectorAll(".disabled-field").forEach(function(e){var n=S.messages.fieldNonEditable;if(n){var r=w.default.markup("p",n,{className:"frmb-tt"});e.appendChild(r),e.addEventListener("mousemove",function(n){return t(n,{tt:r,field:e})})}})}},{key:"classNames",value:function(e,t){var n=e.querySelector(".fld-className");if(n){var r=void 0,o=t.type,i=t.style,a=n.value.split(" "),s={button:"btn",submit:"btn"},l=s[o];if(l){if(i){for(r=0;r2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=this,i=E.default.current,a=o.showOverlay(),s=A("button",i.yes,{className:"yes btn btn-success btn-sm"}),l=A("button",i.no,{className:"no btn btn-danger btn-sm"});l.onclick=function(){o.closeConfirm(a)},s.onclick=function(){t(),o.closeConfirm(a)};var c=A("div",[l,s],{className:"button-wrap"});r="form-builder-dialog "+r;var u=A("div",[e,c],{className:r});if(n)u.classList.add("positioned");else{var f=document.documentElement;n={pageX:Math.max(f.clientWidth,window.innerWidth||0)/2,pageY:Math.max(f.clientHeight,window.innerHeight||0)/2},u.style.position="fixed"}return u.style.left=n.pageX+"px",u.style.top=n.pageY+"px",document.body.appendChild(u),s.focus(),u}},{key:"dialog",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=this,o=document.documentElement.clientWidth,i=document.documentElement.clientHeight;r.showOverlay(),n="form-builder-dialog "+n;var a=w.default.markup("div",e,{className:n});return t?a.classList.add("positioned"):(t={pageX:Math.max(o,window.innerWidth||0)/2,pageY:Math.max(i,window.innerHeight||0)/2},a.style.position="fixed"),a.style.left=t.pageX+"px",a.style.top=t.pageY+"px",document.body.appendChild(a),document.dispatchEvent(j.default.modalOpened),n.indexOf("data-dialog")!==-1&&document.dispatchEvent(j.default.viewData),a}},{key:"confirmRemoveAll",value:function(e){var t=this,n=e.target.id.match(/frmb-\d{13}/)[0],r=document.getElementById(n),o=E.default.current,i=$("li.form-field",r),a=e.target.getBoundingClientRect(),s=document.body.getBoundingClientRect(),l={pageX:a.left+a.width/2,pageY:a.top-s.top-12};i.length?t.confirm(o.clearAllMessage,function(){t.removeAllFields.call(t,r),O.config.opts.notify.success(o.allFieldsRemoved),O.config.opts.onClearAll()},l):t.dialog(o.noFieldsToClear,l)}},{key:"removeAllFields",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=E.default.current,o=O.config.opts,i=e.querySelectorAll("li.form-field"),a=[];if(!i.length)return!1;if(o.prepend&&a.push(!0),o.append&&a.push(!0),a.some(function(e){return e===!0})||(e.parentElement.classList.add("empty"),e.parentElement.dataset.content=r.getStarted),t){e.classList.add("removing");var s=0;i.forEach(function(e){return s+=e.offsetHeight+3}),i[0].style.marginTop=-s+"px",setTimeout(function(){(0,b.empty)(e).classList.remove("removing"),n.save(e)},400)}else(0,b.empty)(e),n.save(e)}},{key:"setFieldOrder",value:function(e){if(!O.config.opts.sortableControls)return!1;var t={};e.children().each(function(e,n){t[e]=$(n).data("type")}),window.sessionStorage&&window.sessionStorage.setItem("fieldOrder",window.JSON.stringify(t))}},{key:"orderFields",value:function(e){var t=O.config.opts,n=!1,r=[];if(window.sessionStorage&&(t.sortableControls?n=window.sessionStorage.getItem("fieldOrder"):window.sessionStorage.removeItem("fieldOrder")),n)n=window.JSON.parse(n),n=(0,c.default)(n).map(function(e){return n[e]});else{var o=t.controlOrder.concat(e.map(function(e){return e.attrs.type}));n=w.default.unique(o)}return n.forEach(function(t){var n=e.filter(function(e){return e.attrs.type===t})[0];r.push(n)}),r.filter(Boolean)}},{key:"closeAllEdit",value:function(){var e=this,t=$("> li.editing",e.d.stage),n=$(".toggle-form",e.d.stage),r=$(".frm-holder",t);n.removeClass("open"),t.removeClass("editing"),$(".prev-holder",t).show(),r.hide()}},{key:"toggleEdit",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=document.getElementById(e),r=$(".toggle-form",n),o=$(".frm-holder",n);n.classList.toggle("editing"),r.toggleClass("open"),t?($(".prev-holder",n).slideToggle(250),o.slideToggle(250)):($(".prev-holder",n).toggle(),o.toggle()),this.updatePreview($(n))}},{key:"stickyControls",value:function(){var e=this.d,t=$(e.controls).parent(),n=$(e.stage).parent(),r=t.width(),o=e.controls.getBoundingClientRect();$(window).scroll(function(i){var a=$(i.target).scrollTop(),l={top:5,bottom:"auto",right:"auto",left:o.left},c=(0,s.default)({},l,O.config.opts.stickyControls.offset);if(a>n.offset().top){var u={position:"fixed",width:r},f=(0,s.default)(u,c),d=t.offset(),p=n.offset(),v=d.top+t.height(),h=p.top+n.height();v>h&&d.top!==p.top&&t.css({position:"absolute",top:"auto",bottom:0,right:0,left:"auto"}),(va)&&t.css(f)}else e.controls.parentElement.removeAttribute("style")})}},{key:"showData",value:function(e){var t=this.data,n=w.default.escapeHtml(t.formData),r=A("code",n,{className:"formData-"+O.config.opts.dataType});this.dialog(A("pre",r),null,"data-dialog")}},{key:"removeField",value:function(e){var t=!1,n=this,r=this.d.stage,o=r.getElementsByClassName("form-field");if(!o.length)return console.warn("No fields to remove"),!1;if(!e){var i=[].slice.call(o).map(function(e){return e.id});console.warn("fieldID required to remove specific fields. Removing last field since no ID was supplied."),console.warn("Available IDs: "+i.join(", ")),e=r.lastChild.id}var a=document.getElementById(e),s=$(a);return a?(s.slideUp(250,function(){if(s.removeClass("deleting"),s.remove(),t=!0,n.save(),!r.childNodes.length){var e=r.parentElement;e.classList.add("empty"),e.dataset.content=E.default.current.getStarted}}),document.dispatchEvent(j.default.fieldRemoved),t):(console.warn("Field not found"),!1)}},{key:"processActionButtons",value:function(e){var t=e.label,n=e.events,r=(0,i.default)(e,["label","events"]),o=this.data;t=t?E.default.current[t]||"":r.id?E.default.current[r.id]||w.default.capitalize(r.id):"",r.id?r.id=o.formID+"-"+r.id+"-action":r.id=o.formID+"-action-"+Math.round(1e3*Math.random());var a=A("button",t,r);if(n){var s=function(e){n.hasOwnProperty(e)&&a.addEventListener(e,function(t){return n[e](t)})};for(var l in n)s(l)}return a}},{key:"processSubtypes",value:function(e){var t={},n=function(e){return{label:E.default.get(e),value:e}};O.config.subtypes=w.default.merge(b.defaultSubtypes,e);for(var r in O.config.subtypes)O.config.subtypes.hasOwnProperty(r)&&(t[r]=O.config.subtypes[r].map(n));return t}},{key:"editorUI",value:function(e){var t=this.d,n=this.data;t.stage=A("ul",null,{id:n.formID,className:"frmb"}),t.controls=A("ul",null,{id:n.formID+"-control-box",className:"frmb-control"})}},{key:"processOptions",value:function(e){var t=this,n=e.fields,r=void 0===n?[]:n,o=e.templates,a=(0,i.default)(e,["fields","templates"]),l=[{id:"clear",className:"clear-all btn btn-danger",events:{click:t.confirmRemoveAll.bind(t)}},{label:"viewJSON",id:"data",className:"btn btn-default",events:{click:t.showData.bind(t)}},{id:"save",type:"button",className:"btn btn-primary save-template",events:{click:function(e){t.save(),O.config.opts.onSave(e,t.data.formData)}}}],u=[{label:E.default.get("autocomplete"),attrs:{type:"autocomplete"}},{label:E.default.get("button"),attrs:{type:"button"}},{label:E.default.get("checkboxGroup"),attrs:{type:"checkbox-group"}},{label:E.default.get("dateField"),attrs:{type:"date"}},{label:E.default.get("fileUpload"),attrs:{type:"file"}},{label:E.default.get("header"),attrs:{type:"header"}},{label:E.default.get("hidden"),attrs:{type:"hidden"}},{label:E.default.get("number"),attrs:{type:"number"}},{label:E.default.get("paragraph"),attrs:{type:"paragraph"}},{label:E.default.get("radioGroup"),attrs:{type:"radio-group"}},{label:E.default.get("select"), +attrs:{type:"select"}},{label:E.default.get("text"),attrs:{type:"text"}},{label:E.default.get("textArea"),attrs:{type:"textarea"}}];a.fields=r.concat(u),O.config.opts=(0,s.default)({},{actionButtons:l,templates:o,fields:r},a);var f=(0,c.default)(O.config.opts.templates).map(function(e){return[e,O.config.opts.templates[e]]});return w.default.templates=w.default.templates.concat(f),O.config.opts}}]),e}();n.default=T},{"./config":128,"./data":129,"./dom":130,"./events":131,"./utils":135,"babel-runtime/core-js/object/assign":5,"babel-runtime/core-js/object/keys":7,"babel-runtime/helpers/asyncToGenerator":11,"babel-runtime/helpers/classCallCheck":12,"babel-runtime/helpers/createClass":13,"babel-runtime/helpers/objectWithoutProperties":14,"babel-runtime/regenerator":18,mi18n:124}],134:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(){"remove"in Element.prototype||(Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)}),"function"!=typeof Event&&!function(){window.Event=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!0),t}}(),"function"!=typeof a.default&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");e=Object(e);for(var t=1;t>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(t=arguments[1]),n=0;n1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=g.contentType(t),o=n.events,i=(0,h.default)(n,["events"]),a=document.createElement(e),s={string:function(e){a.innerHTML+=e},object:function(e){var t=e.tag,n=e.content,r=(0,h.default)(e,["tag","content"]);return a.appendChild(g.markup(t,n,r))},node:function(e){return a.appendChild(e)},array:function(e){for(var t=0;t":">"},n=function(e){return t[e]||e};return"string"==typeof e?e.replace(/["&<>]/g,n):e},g.escapeAttrs=function(e){for(var t in e)e.hasOwnProperty(t)&&(e[t]=g.escapeAttr(e[t]));return e},g.forEach=function(e,t,n){for(var r=0;r-1&&t.splice(n,1)},g.makeLabel=function(e){var t=e.label,n=void 0===t?"":t,r=e.description,o=void 0===r?"":r,i=(0,h.default)(e,["label","description"]),a=g.parsedHtml(n),s=[a];i.required&&s.push(_("span"," *",{className:"fb-required"})),"hidden"!==i.type&&o&&s.push(_("span","?",{className:"tooltip-element",tooltip:o}));var l={className:"fb-"+i.type+"-label"};return i.id&&(l.for=i.id),_("label",s,l)},g.templateMap=function(e){var t=void 0,n=g.templates,r=!0,o=!1,i=void 0;try{for(var a,s=(0,f.default)(n);!(r=(a=s.next()).done);r=!0){var l=a.value,c=(0,p.default)(l,2),u=c[0],d=c[1];if(Array.isArray(u)){if(g.inArray(e,u)){t=d;break}}else if(e===u){t=d;break}}}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return t},g.autocompleteTemplate=function(e){var t=e.values,n=e.type,r=(0,h.default)(e,["values","type"]),o=function(e){var t=e.target.nextSibling.nextSibling,n=t.getElementsByClassName("active-option")[0],r=[[38,function(){n&&n.previousSibling&&(n.classList.remove("active-option"),n=n.previousSibling,n.classList.add("active-option"))}],[40,function(){n?n.nextSibling&&(n.classList.remove("active-option"),n=n.nextSibling,n.classList.add("active-option")):(n=t.firstChild,n.classList.add("active-option"))}],[13,function(){n&&(e.target.value=n.innerHTML,"none"===t.style.display?t.style.display="block":t.style.display="none")}]],o=new c.default(r),i=o.get(e.keyCode);return i||(i=function(){return!1}),i()},i={focus:function(e){var t=e.target.nextSibling.nextSibling;e.target.addEventListener("keydown",o),t.style.display="block",t.style.width=t.parentElement.offsetWidth+"px"},blur:function(e){e.target.removeEventListener("keydown",o),setTimeout(function(){e.target.nextSibling.nextSibling.style.display="none"},200)},input:function(e){var t=e.target.nextSibling.nextSibling;(0,b.filter)(t.querySelectorAll("li"),e.target.value),e.target.value?t.style.display="block":t.style.display="none"}},a=(0,s.default)({},r,{id:r.id+"-input",events:i}),l=(0,s.default)({},r,{type:"hidden"});delete a.name;var u=[_("input",null,a),_("input",null,l)],f=t.map(function(e){var t=e.label,n={events:{click:function(t){var n=t.target.parentElement,r=n.previousSibling.previousSibling;r.value=e.label,r.previousSibling.value=e.value,n.style.display="none"}},value:e.value};return _("li",t,n)});u.push(_("ul",f,{id:r.id+"-list",className:"fb-"+n+"-list"}));var d=function(e){};return{field:u,onRender:d}},g.selectTemplate=function(e,t){var n=[],r=e.values,o=e.type,i=e.inline,a=e.other,l=e.toggle,c=(0,h.default)(e,["values","type","inline","other","toggle"]),u=g.processFieldDataAttrs(c,t),f=o.replace("-group",""),d="select"===o;if(r){u.placeholder&&d&&n.push(_("option",u.placeholder,{disabled:null,selected:null}));for(var p=0;p1&&void 0!==arguments[1]?arguments[1]:"js",n=!1,r=window.fbLoaded[t];return n=Array.isArray(e)?e.every(function(e){return g.inArray(e,r)}):g.inArray(e,r)},g.getStyles=function(e,t){if(!g.isCached(e,"css")){var n=function(e){var t=document.createElement("link");t.type="text/css",t.rel="stylesheet",t.href=e,document.head.appendChild(t),window.fbLoaded.css.push(e)};e.forEach(function(e){return n((t||"")+e)})}},g.longTextTemplate=function(e){var t=e.value,n=void 0===t?"":t,r=(0,h.default)(e,["value"]),o={field:_("textarea",g.parsedHtml(n),r)},i={tinymce:{js:["//cdn.tinymce.com/4/tinymce.min.js"],onRender:function(t){window.tinymce.editors[e.id]&&window.tinymce.editors[e.id].remove(),window.tinymce.init({target:o.field,height:250,plugins:["advlist autolink lists link image charmap print preview anchor","searchreplace visualblocks code fullscreen","insertdatetime media table contextmenu paste code"],toolbar:"insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"})}},quill:{js:["//cdn.quilljs.com/1.1.3/quill.js"],css:["//cdn.quilljs.com/1.1.3/quill.snow.css"],onRender:function(t){var i=window.Quill.import("delta");window.fbEditors.quill[e.id]={};var a=window.fbEditors.quill[e.id];a.instance=new window.Quill(o.field,{modules:{toolbar:[[{header:[1,2,!1]}],["bold","italic","underline"],["code-block"]]},placeholder:r.placeholder||"",theme:"snow"}),a.data=new i,n&&a.instance.setContents(window.JSON.parse(g.parsedHtml(n))),a.instance.on("text-change",function(e){a.data=a.data.compose(e)})}}};"textarea"!==e.type&&(o.onRender=i[e.type].onRender),"quill"===e.type&&(o.field=_("div",null,r));var a=function t(){i[e.type]&&(document.removeEventListener("fieldRendered",t),i[e.type].css&&g.getStyles(i[e.type].css),i[e.type].js&&!g.isCached(i[e.type].js)?g.getScripts(i[e.type].js).done(o.onRender):o.onRender())};return{field:o.field,onRender:a}},g.templates=[["autocomplete",function(e){var t=g.processFieldDataAttrs(e),n=g.makeLabel(e),r=g.autocompleteTemplate(t),o={field:[n,r.field],onRender:r.onRender};return o}],[b.defaultSubtypes.text.concat(["number","file","date"]),function(e){var t=g.processFieldDataAttrs(e),n=g.makeLabel(e),r={field:[n,_("input",null,t)]};return r}],[["paragraph"].concat(b.defaultSubtypes.paragraph),function(e){var t=g.processFieldDataAttrs(e),n={field:[_(e.type,g.parsedHtml(e.label),t)]};return n}],[b.defaultSubtypes.button,function(e){var t=g.processFieldDataAttrs(e),n={field:_("button",e.label,t)};return n}],[["select","checkbox-group","radio-group","checkbox"],function(e){var t=g.makeLabel(e),n=g.selectTemplate(e),r={field:[t,n]};return r}],[["textarea","tinymce","quill"],function(e){var t=g.processFieldDataAttrs(e),n=g.longTextTemplate(t),r=g.makeLabel(e),o={field:[r,n.field],onRender:n.onRender};return o}]],g.processFieldDataAttrs=function(e){var t=(e.label,e.description,e.subtype),n=(0,h.default)(e,["label","description","subtype"]);return n.id||(n.id=n.name),t&&(n.type=t),(n.multiple||"checkbox-group"===n.type)&&(n.name=n.name+"[]"),n.required&&(n.required=!0,n["aria-required"]="true"),n},g.getTemplate=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=void 0;t&&(e.name?e.name=e.name+"-preview":e.name=g.nameAttr(e)+"-preview");var r=g.templateMap(e.type);if(r=r?r(e,t):g.defaultField(e,t)(),"hidden"!==e.type){var o={};e.name&&(o.className="fb-"+e.type+" form-group field-"+e.name),n=g.markup("div",r.field,o)}else{var i=g.processFieldDataAttrs(e);n=g.markup("input",null,i)}return r.onRender&&n.addEventListener("fieldRendered",r.onRender),n},g.otherOptionCB=function(e){var t=document.getElementById(e),n=document.getElementById(e+"-value");t.checked?n.style.display="inline-block":n.style.display="none"},g.capitalize=function(e){return e.replace(/\b\w/g,function(e){return e.toUpperCase()})},g.merge=function(e,t){var n=(0,s.default)({},e,t);for(var r in t)n.hasOwnProperty(r)&&(Array.isArray(t[r])?n[r]=Array.isArray(e[r])?g.unique(e[r].concat(t[r])):t[r]:"object"===(0,y.default)(t[r])?n[r]=g.merge(e[r],t[r]):n[r]=t[r]);return n},g.addEventListeners=function(e,t,n){return t.split(" ").forEach(function(t){return e.addEventListener(t,n,!1)})},g.closest=function(e,t){for(var n=t.replace(".","");(e=e.parentElement)&&!e.classList.contains(n););return e},g.noop=function(){return null},g.debounce=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:250,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=void 0;return function(){for(var o=arguments.length,i=Array(o),a=0;a { return ``; }; - let checked = (values[name] !== undefined ? 'checked' : ''); + let checked = (values[name] ? 'checked' : ''); let input = ` `; let left = []; let right = [ diff --git a/src/sass/_stage.scss b/src/sass/_stage.scss index b878bb7c2..1d446b1f0 100644 --- a/src/sass/_stage.scss +++ b/src/sass/_stage.scss @@ -268,7 +268,7 @@ display: block; .form-group { - margin-bottom: 0; + margin: 0; } .ql-editor {