MiBuZXcgY29tbWl0cyBpbiBnYWxheHktY2VudHJhbDoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9n YWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy84ZWM2OTA1MjYwMGEvCkNoYW5nZXNldDogICA4 ZWM2OTA1MjYwMGEKVXNlcjogICAgICAgIGRhbm5vbgpEYXRlOiAgICAgICAgMjAxNC0xMi0xNSAx NDozOTo1NSswMDowMApTdW1tYXJ5OiAgICAgQWRkIGRlZmF1bHQgbnVtZXJpY2FsIGNvbHVtbiBo ZWFkZXJzLCBwZXIgQmo9QzM9QjZybidzIFBSIChzbGk9CmdodGx5IHR3ZWFrZWQpIGh0dHBzOi8v Yml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvcHVsbC1yZXF1ZXN0LzYxMT0KL2Fk ZC1hLWRlZmF1bHQtaGVhZGVyLXRvLXRhYnVsYXItb3V0cHV0Ly4KQWZmZWN0ZWQgIzogIDMgZmls ZXMKCmRpZmYgLXIgN2U2OGFhM2Q4ZDE2MWZmMmEwNTI2MTAxYWVkZWJjMDI2YjRkNzFjYyAtciA4 ZWM2OTA1MjYwMGEyYzkxNWY4OGQzMT0KODU4ODRhMTg1ZTgyMDg2ZDEgY2xpZW50L2dhbGF4eS9z Y3JpcHRzL212Yy9kYXRhLmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvZGF0YS5q cworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL2RhdGEuanMKQEAgLTE3Niw2ICsxNzYs MTAgQEAKICAgICAgICAgICAgIGhlYWRlcl9yb3cgPTNEICQoJzx0ci8+JykuY3NzKCdiYWNrZ3Jv dW5kLWNvbG9yJywgdGhpcy5oZWFkZXJfPQpjb2xvcikuYXBwZW5kVG8oZGF0YV90YWJsZSk7CiAg ICAgICAgIGlmIChjb2x1bW5fbmFtZXMpIHsKICAgICAgICAgICAgIGhlYWRlcl9yb3cuYXBwZW5k KCc8dGg+JyArIGNvbHVtbl9uYW1lcy5qb2luKCc8L3RoPjx0aD4nKSArICc8PQovdGg+Jyk7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHZhciBqID0zRCAxOyBqIDw9M0QgdGhp cy5tb2RlbC5nZXRfbWV0YWRhdGEoJ2NvbHVtbnMnKTsgaj0KKyspIHsKKyAgICAgICAgICAgICAg ICBoZWFkZXJfcm93LmFwcGVuZCgnPHRoPicgKyBqICsgJzwvdGg+Jyk7CisgICAgICAgICAgICB9 CiAgICAgICAgIH0KPTIwCiAgICAgICAgIC8vIFJlbmRlciBmaXJzdCBjaHVuay4KCmRpZmYgLXIg N2U2OGFhM2Q4ZDE2MWZmMmEwNTI2MTAxYWVkZWJjMDI2YjRkNzFjYyAtciA4ZWM2OTA1MjYwMGEy YzkxNWY4OGQzMT0KODU4ODRhMTg1ZTgyMDg2ZDEgc3RhdGljL3NjcmlwdHMvbXZjL2RhdGEuanMK LS0tIGEvc3RhdGljL3NjcmlwdHMvbXZjL2RhdGEuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvbXZj L2RhdGEuanMKQEAgLTE3Niw2ICsxNzYsMTAgQEAKICAgICAgICAgICAgIGhlYWRlcl9yb3cgPTNE ICQoJzx0ci8+JykuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy5oZWFkZXJfPQpjb2xvciku YXBwZW5kVG8oZGF0YV90YWJsZSk7CiAgICAgICAgIGlmIChjb2x1bW5fbmFtZXMpIHsKICAgICAg ICAgICAgIGhlYWRlcl9yb3cuYXBwZW5kKCc8dGg+JyArIGNvbHVtbl9uYW1lcy5qb2luKCc8L3Ro Pjx0aD4nKSArICc8PQovdGg+Jyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3Ig KHZhciBqID0zRCAxOyBqIDw9M0QgdGhpcy5tb2RlbC5nZXRfbWV0YWRhdGEoJ2NvbHVtbnMnKTsg aj0KKyspIHsKKyAgICAgICAgICAgICAgICBoZWFkZXJfcm93LmFwcGVuZCgnPHRoPicgKyBqICsg JzwvdGg+Jyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KPTIwCiAgICAgICAgIC8vIFJlbmRl ciBmaXJzdCBjaHVuay4KCmRpZmYgLXIgN2U2OGFhM2Q4ZDE2MWZmMmEwNTI2MTAxYWVkZWJjMDI2 YjRkNzFjYyAtciA4ZWM2OTA1MjYwMGEyYzkxNWY4OGQzMT0KODU4ODRhMTg1ZTgyMDg2ZDEgc3Rh dGljL3NjcmlwdHMvcGFja2VkL212Yy9kYXRhLmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL3BhY2tl ZC9tdmMvZGF0YS5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL2RhdGEuanMKQEAg LTEsMSArMSwxIEBACi1kZWZpbmUoWyJtdmMvdWkvdWktbW9kYWwiLCJtdmMvdWkvdWktZnJhbWVz IiwibXZjL3VpL2ljb24tYnV0dG9uIl0sZnVuY3Rpbz0KbihrLGosZil7dmFyIGg9M0RCYWNrYm9u ZS5Nb2RlbC5leHRlbmQoe30pO3ZhciBiPTNEQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtkPQplZmF1 bHRzOntpZDoiIix0eXBlOiIiLG5hbWU6IiIsaGRhX2xkZGE6ImhkYSIsbWV0YWRhdGE6bnVsbH0s aW5pdGlhbGl6ZTpmdW49CmN0aW9uKCl7aWYoIXRoaXMuZ2V0KCJtZXRhZGF0YSIpKXt0aGlzLl9z ZXRfbWV0YWRhdGEoKX10aGlzLm9uKCJjaGFuZ2UiLHRoaT0Kcy5fc2V0X21ldGFkYXRhLHRoaXMp fSxfc2V0X21ldGFkYXRhOmZ1bmN0aW9uKCl7dmFyIG49M0RuZXcgaCgpO18uZWFjaChfLmtlPQp5 cyh0aGlzLmF0dHJpYnV0ZXMpLGZ1bmN0aW9uKG8pe2lmKG8uaW5kZXhPZigibWV0YWRhdGFfIik9 M0Q9M0Q9M0QwKXt2YXIgcD0KPTNEby5zcGxpdCgibWV0YWRhdGFfIilbMV07bi5zZXQocCx0aGlz LmF0dHJpYnV0ZXNbb10pO2RlbGV0ZSB0aGlzLmF0dHJpYnV0PQplc1tvXX19LHRoaXMpO3RoaXMu c2V0KCJtZXRhZGF0YSIsbix7c2lsZW50OnRydWV9KX0sZ2V0X21ldGFkYXRhOmZ1bmN0aW9uKG49 Cil7cmV0dXJuIHRoaXMuYXR0cmlidXRlcy5tZXRhZGF0YS5nZXQobil9LHVybFJvb3Q6Z2FsYXh5 X2NvbmZpZy5yb290KyJhcGkvZD0KYXRhc2V0cyJ9KTt2YXIgaT0zRGIuZXh0ZW5kKHtkZWZhdWx0 czpfLmV4dGVuZCh7fSxiLnByb3RvdHlwZS5kZWZhdWx0cyx7Y2h1PQpua191cmw6bnVsbCxmaXJz dF9kYXRhX2NodW5rOm51bGwsY2h1bmtfaW5kZXg6LTEsYXRfZW9mOmZhbHNlfSksaW5pdGlhbGl6 ZTo9CmZ1bmN0aW9uKG4pe2IucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzKTt0aGlzLmF0 dHJpYnV0ZXMuY2h1bmtfaW5kZXg9Cj0zRCh0aGlzLmF0dHJpYnV0ZXMuZmlyc3RfZGF0YV9jaHVu az8xOjApO3RoaXMuYXR0cmlidXRlcy5jaHVua191cmw9M0RnYWxheD0KeV9jb25maWcucm9vdCsi ZGF0YXNldC9kaXNwbGF5P2RhdGFzZXRfaWQ9M0QiK3RoaXMuaWQ7dGhpcy5hdHRyaWJ1dGVzLnVy bF92PQppej0zRGdhbGF4eV9jb25maWcucm9vdCsidmlzdWFsaXphdGlvbiJ9LGdldF9uZXh0X2No dW5rOmZ1bmN0aW9uKCl7aWYodGhpcy49CmF0dHJpYnV0ZXMuYXRfZW9mKXtyZXR1cm4gbnVsbH12 YXIgbj0zRHRoaXMsbz0zRCQuRGVmZXJyZWQoKTskLmdldEpTT04odGhpcz0KLmF0dHJpYnV0ZXMu Y2h1bmtfdXJsLHtjaHVuazpuLmF0dHJpYnV0ZXMuY2h1bmtfaW5kZXgrK30pLnN1Y2Nlc3MoZnVu Y3Rpb24oPQpwKXt2YXIgcTtpZihwLmNrX2RhdGEhPTNEPTNEIiIpe3E9M0RwfWVsc2V7bi5hdHRy aWJ1dGVzLmF0X2VvZj0zRHRydWU7cT0zRG49CnVsbH1vLnJlc29sdmUocSl9KTtyZXR1cm4gb319 KTt2YXIgZT0zREJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kKHttb2RlbDpifT0KKTt2YXIgYT0z REJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKG4pe3RoaXMucm93X2Nv dW50PTNEMDt0PQpoaXMubG9hZGluZ19jaHVuaz0zRGZhbHNlO3RoaXMuaGVhZGVyX2NvbG9yPTNE IiNBQUEiO3RoaXMuZGFya19yb3dfY29sb3I9M0Q9CiIjREREIjtuZXcgZCh7bW9kZWw6bi5tb2Rl bCwkZWw6dGhpcy4kZWx9KX0sZXhwYW5kX3RvX2NvbnRhaW5lcjpmdW5jdGlvbigpez0KaWYodGhp cy4kZWwuaGVpZ2h0KCk8dGhpcy5zY3JvbGxfZWx0LmhlaWdodCgpKXt0aGlzLmF0dGVtcHRfdG9f ZmV0Y2goKX19LGF0PQp0ZW1wdF90b19mZXRjaDpmdW5jdGlvbihvKXt2YXIgbj0zRHRoaXM7aWYo IXRoaXMubG9hZGluZ19jaHVuayYmdGhpcy5zY3JvbGw9CmVkX3RvX2JvdHRvbSgpKXt0aGlzLmxv YWRpbmdfY2h1bms9M0R0cnVlO3RoaXMubG9hZGluZ19pbmRpY2F0b3Iuc2hvdygpOyQudz0KaGVu KG4ubW9kZWwuZ2V0X25leHRfY2h1bmsoKSkudGhlbihmdW5jdGlvbihwKXtpZihwKXtuLl9yZW5k ZXJDaHVuayhwKTtuLmxvPQphZGluZ19jaHVuaz0zRGZhbHNlfW4ubG9hZGluZ19pbmRpY2F0b3Iu aGlkZSgpO24uZXhwYW5kX3RvX2NvbnRhaW5lcigpfSl9fSw9CnJlbmRlcjpmdW5jdGlvbigpe3Ro aXMubG9hZGluZ19pbmRpY2F0b3I9M0QkKCI8ZGl2Lz4iKS5hdHRyKCJpZCIsImxvYWRpbmdfaT0K bmRpY2F0b3IiKTt0aGlzLiRlbC5hcHBlbmQodGhpcy5sb2FkaW5nX2luZGljYXRvcik7dmFyIHE9 M0QkKCI8dGFibGUvPiIpLmF0PQp0cih7aWQ6ImNvbnRlbnRfdGFibGUiLGNlbGxwYWRkaW5nOjB9 KTt0aGlzLiRlbC5hcHBlbmQocSk7dmFyIG49M0R0aGlzLm1vZGU9CmwuZ2V0X21ldGFkYXRhKCJj b2x1bW5fbmFtZXMiKSxyPTNEJCgiPHRyLz4iKS5jc3MoImJhY2tncm91bmQtY29sb3IiLHRoaXMu aD0KZWFkZXJfY29sb3IpLmFwcGVuZFRvKHEpO2lmKG4pe3IuYXBwZW5kKCI8dGg+IituLmpvaW4o IjwvdGg+PHRoPiIpKyI8L3RoPiIpPQp9dmFyIHA9M0R0aGlzLG89M0R0aGlzLm1vZGVsLmdldCgi Zmlyc3RfZGF0YV9jaHVuayIpO2lmKG8pe3RoaXMuX3JlbmRlckNodW49Cmsobyl9ZWxzZXskLndo ZW4ocC5tb2RlbC5nZXRfbmV4dF9jaHVuaygpKS50aGVuKGZ1bmN0aW9uKHMpe3AuX3JlbmRlckNo dW5rKD0Kcyl9KX10aGlzLnNjcm9sbF9lbHQuc2Nyb2xsKGZ1bmN0aW9uKCl7cC5hdHRlbXB0X3Rv X2ZldGNoKCl9KX0sc2Nyb2xsZWRfdG9fPQpib3R0b206ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9 LF9yZW5kZXJDZWxsOmZ1bmN0aW9uKHEsbixyKXt2YXIgbz0zRCQoIjx0ZD49CiIpLnRleHQocSk7 dmFyIHA9M0R0aGlzLm1vZGVsLmdldF9tZXRhZGF0YSgiY29sdW1uX3R5cGVzIik7aWYociE9M0Q9 M0R1bmRlZj0KaW5lZCl7by5hdHRyKCJjb2xzcGFuIixyKS5hZGRDbGFzcygic3RyaW5nYWxpZ24i KX1lbHNle2lmKHApe2lmKG48cC5sZW5ndGgpPQp7aWYocFtuXT0zRD0zRD0zRCJzdHIifHxwW25d PTNEPTNEPTNEImxpc3QiKXtvLmFkZENsYXNzKCJzdHJpbmdhbGlnbiIpfX19fXI9CmV0dXJuIG99 LF9yZW5kZXJSb3c6ZnVuY3Rpb24obil7dmFyIG89M0RuLnNwbGl0KCJcdCIpLHE9M0QkKCI8dHI+ IikscD0zRHRoaT0Kcy5tb2RlbC5nZXRfbWV0YWRhdGEoImNvbHVtbnMiKTtpZih0aGlzLnJvd19j b3VudCUyIT0zRD0zRDApe3EuY3NzKCJiYWNrZ3JvPQp1bmQtY29sb3IiLHRoaXMuZGFya19yb3df Y29sb3IpfWlmKG8ubGVuZ3RoPTNEPTNEPTNEcCl7Xy5lYWNoKG8sZnVuY3Rpb24ocyw9CnIpe3Eu YXBwZW5kKHRoaXMuX3JlbmRlckNlbGwocyxyKSl9LHRoaXMpfWVsc2V7aWYoby5sZW5ndGg+cCl7 Xy5lYWNoKG8uc2xpYz0KZSgwLHAtMSksZnVuY3Rpb24ocyxyKXtxLmFwcGVuZCh0aGlzLl9yZW5k ZXJDZWxsKHMscikpfSx0aGlzKTtxLmFwcGVuZCh0aGlzPQouX3JlbmRlckNlbGwoby5zbGljZShw LTEpLmpvaW4oIlx0IikscC0xKSl9ZWxzZXtpZihwPjUmJm8ubGVuZ3RoPTNEPTNEPTNEcC09CjEp e18uZWFjaChvLGZ1bmN0aW9uKHMscil7cS5hcHBlbmQodGhpcy5fcmVuZGVyQ2VsbChzLHIpKX0s dGhpcyk7cS5hcHBlbmQoJD0KKCI8dGQ+IikpfWVsc2V7cS5hcHBlbmQodGhpcy5fcmVuZGVyQ2Vs bChuLDAscCkpfX19dGhpcy5yb3dfY291bnQrKztyZXR1cm4gPQpxfSxfcmVuZGVyQ2h1bms6ZnVu Y3Rpb24obil7dmFyIG89M0R0aGlzLiRlbC5maW5kKCJ0YWJsZSIpO18uZWFjaChuLmNrX2RhdGE9 Ci5zcGxpdCgiXG4iKSxmdW5jdGlvbihwLHEpe2lmKHAhPTNEPTNEIiIpe28uYXBwZW5kKHRoaXMu X3JlbmRlclJvdyhwKSl9fSx0aD0KaXMpfX0pO3ZhciBnPTNEYS5leHRlbmQoe2luaXRpYWxpemU6 ZnVuY3Rpb24obil7YS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsPQoodGhpcyxuKTtzY3JvbGxf ZWx0PTNEXy5maW5kKHRoaXMuJGVsLnBhcmVudHMoKSxmdW5jdGlvbihvKXtyZXR1cm4gJChvKS5j c3M9Cigib3ZlcmZsb3ciKT0zRD0zRD0zRCJhdXRvIn0pO2lmKCFzY3JvbGxfZWx0KXtzY3JvbGxf ZWx0PTNEd2luZG93fXRoaXMuc2Nybz0KbGxfZWx0PTNEJChzY3JvbGxfZWx0KX0sc2Nyb2xsZWRf dG9fYm90dG9tOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuJGVsLmhlaWdoPQp0KCktdGhpcy5zY3Jv bGxfZWx0LnNjcm9sbFRvcCgpLXRoaXMuc2Nyb2xsX2VsdC5oZWlnaHQoKTw9M0QwKX19KTt2YXIg bT0zRGE9Ci5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24obil7YS5wcm90b3R5cGUuaW5pdGlh bGl6ZS5jYWxsKHRoaXMsbik7dGhpcy5zYz0Kcm9sbF9lbHQ9M0R0aGlzLiRlbC5jc3Moe3Bvc2l0 aW9uOiJyZWxhdGl2ZSIsb3ZlcmZsb3c6InNjcm9sbCIsaGVpZ2h0OnRoaXMuPQpvcHRpb25zLmhl aWdodHx8IjUwMHB4In0pfSxzY3JvbGxlZF90b19ib3R0b206ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy4kZWwuc2M9CnJvbGxUb3AoKSt0aGlzLiRlbC5pbm5lckhlaWdodCgpPj0zRHRoaXMuZWwuc2Ny b2xsSGVpZ2h0fX0pO3ZhciBkPTNEQmFja2Jvbj0KZS5WaWV3LmV4dGVuZCh7Y29sOntjaHJvbTpu dWxsLHN0YXJ0Om51bGwsZW5kOm51bGx9LHVybF92aXo6bnVsbCxkYXRhc2V0X2lkPQo6bnVsbCxn ZW5vbWVfYnVpbGQ6bnVsbCxmaWxlX2V4dDpudWxsLGluaXRpYWxpemU6ZnVuY3Rpb24ocCl7dmFy IHM9M0RwYXJlbnQ9Ci5HYWxheHk7aWYocyYmcy5tb2RhbCl7dGhpcy5tb2RhbD0zRHMubW9kYWx9 aWYocyYmcy5mcmFtZSl7dGhpcy5mcmFtZT0zRHMuZj0KcmFtZX1pZighdGhpcy5tb2RhbHx8IXRo aXMuZnJhbWUpe3JldHVybn12YXIgbz0zRHAubW9kZWw7dmFyIHI9M0RvLmdldCgibWV0PQphZGF0 YSIpO2lmKCFvLmdldCgiZmlsZV9leHQiKSl7cmV0dXJufXRoaXMuZmlsZV9leHQ9M0RvLmdldCgi ZmlsZV9leHQiKTtpZig9CnRoaXMuZmlsZV9leHQ9M0Q9M0QiYmVkIil7aWYoci5nZXQoImNocm9t Q29sIikmJnIuZ2V0KCJzdGFydENvbCIpJiZyLmdldCgiZT0KbmRDb2wiKSl7dGhpcy5jb2wuY2hy b209M0RyLmdldCgiY2hyb21Db2wiKS0xO3RoaXMuY29sLnN0YXJ0PTNEci5nZXQoInN0YXJ0PQpD b2wiKS0xO3RoaXMuY29sLmVuZD0zRHIuZ2V0KCJlbmRDb2wiKS0xfWVsc2V7Y29uc29sZS5sb2co IlRhYnVsYXJCdXR0b25UcmE9CmNrc3RlciA6IEJlZC1maWxlIG1ldGFkYXRhIGluY29tcGxldGUu Iik7cmV0dXJufX1pZih0aGlzLmZpbGVfZXh0PTNEPTNEInZjZj0KIil7ZnVuY3Rpb24gcSh1LHYp e2Zvcih2YXIgdD0zRDA7dDx2Lmxlbmd0aDt0Kyspe2lmKHZbdF0ubWF0Y2godSkpe3JldHVybiB0 PQp9fXJldHVybiAtMX10aGlzLmNvbC5jaHJvbT0zRHEoIkNocm9tIixyLmdldCgiY29sdW1uX25h bWVzIikpO3RoaXMuY29sLnN0YXI9CnQ9M0RxKCJQb3MiLHIuZ2V0KCJjb2x1bW5fbmFtZXMiKSk7 dGhpcy5jb2wuZW5kPTNEbnVsbDtpZih0aGlzLmNvbC5jaHJvbT0zRD0KPTNELTF8fHRoaXMuY29s LnN0YXJ0PTNEPTNELTEpe2NvbnNvbGUubG9nKCJUYWJ1bGFyQnV0dG9uVHJhY2tzdGVyIDogVkNG LWZpPQpsZSBtZXRhZGF0YSBpbmNvbXBsZXRlLiIpO3JldHVybn19aWYodGhpcy5jb2wuY2hyb209 M0Q9M0Q9M0R1bmRlZmluZWQpe3JldHU9CnJufWlmKG8uaWQpe3RoaXMuZGF0YXNldF9pZD0zRG8u aWR9ZWxzZXtjb25zb2xlLmxvZygiVGFidWxhckJ1dHRvblRyYWNrc3Rlcj0KIDogRGF0YXNldCBp ZGVudGlmaWNhdGlvbiBpcyBtaXNzaW5nLiIpO3JldHVybn1pZihvLmdldCgidXJsX3ZpeiIpKXt0 aGlzLnVyPQpsX3Zpej0zRG8uZ2V0KCJ1cmxfdml6Iil9ZWxzZXtjb25zb2xlLmxvZygiVGFidWxh ckJ1dHRvblRyYWNrc3RlciA6IFVybCBmb3I9CiB2aXN1YWxpemF0aW9uIGNvbnRyb2xsZXIgaXMg bWlzc2luZy4iKTtyZXR1cm59aWYoby5nZXQoImdlbm9tZV9idWlsZCIpKXt0aD0KaXMuZ2Vub21l X2J1aWxkPTNEby5nZXQoImdlbm9tZV9idWlsZCIpfXZhciBuPTNEbmV3IGYuSWNvbkJ1dHRvblZp ZXcoe21vZGVsPQo6bmV3IGYuSWNvbkJ1dHRvbih7dGl0bGU6IlZpc3VhbGl6ZSIsaWNvbl9jbGFz czoiY2hhcnRfY3VydmUiLGlkOiJidG5fdml6In09Cil9KTt0aGlzLnNldEVsZW1lbnQocC4kZWwp O3RoaXMuJGVsLmFwcGVuZChuLnJlbmRlcigpLiRlbCk7dGhpcy5oaWRlKCl9LGV2ZT0KbnRzOnsi bW91c2VvdmVyIHRyIjoic2hvdyIsbW91c2VsZWF2ZToiaGlkZSJ9LHNob3c6ZnVuY3Rpb24ocyl7 ZnVuY3Rpb24gcih4PQope3JldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh4KSkmJmlzRmluaXRlKHgp fWlmKHRoaXMuY29sLmNocm9tPTNEPTNEPTNEbnVsbCk9CntyZXR1cm59dmFyIHc9M0QkKHMudGFy Z2V0KS5wYXJlbnQoKTt2YXIgdD0zRHcuY2hpbGRyZW4oKS5lcSh0aGlzLmNvbC5jaHJvbT0KKS5o dG1sKCk7dmFyIG49M0R3LmNoaWxkcmVuKCkuZXEodGhpcy5jb2wuc3RhcnQpLmh0bWwoKTt2YXIg cD0zRHRoaXMuY29sLmVuPQpkP3cuY2hpbGRyZW4oKS5lcSh0aGlzLmNvbC5lbmQpLmh0bWwoKTpu O2lmKCF0Lm1hdGNoKCJeIyIpJiZ0IT0zRD0zRCIiJiZyKG49Cikpe3ZhciB2PTNEe2RhdGFzZXRf aWQ6dGhpcy5kYXRhc2V0X2lkLGdlbmVfcmVnaW9uOnQrIjoiK24rIi0iK3B9O3ZhciBxPTNEdz0K Lm9mZnNldCgpO3ZhciBvPTNEcS5sZWZ0LTEwO3ZhciB1PTNEcS50b3AtJCh3aW5kb3cpLnNjcm9s bFRvcCgpKzM7JCgiI2J0bl92PQppeiIpLmNzcyh7cG9zaXRpb246ImZpeGVkIix0b3A6dSsicHgi LGxlZnQ6bysicHgifSk7JCgiI2J0bl92aXoiKS5vZmYoImNsaWM9CmsiKTskKCIjYnRuX3ZpeiIp LmNsaWNrKHRoaXMuY3JlYXRlX3RyYWNrc3Rlcl9hY3Rpb24odGhpcy51cmxfdml6LHYsdGhpcy5n ZT0Kbm9tZV9idWlsZCkpOyQoIiNidG5fdml6Iikuc2hvdygpfWVsc2V7JCgiI2J0bl92aXoiKS5o aWRlKCl9fSxoaWRlOmZ1bmN0aW9uPQooKXt0aGlzLiRlbC5maW5kKCIjYnRuX3ZpeiIpLmhpZGUo KX0sY3JlYXRlX3RyYWNrc3Rlcl9hY3Rpb246ZnVuY3Rpb24obixxLHA9Cil7dmFyIG89M0R0aGlz O3JldHVybiBmdW5jdGlvbigpe3ZhciByPTNEe307aWYocCl7clsiZi1kYmtleSJdPTNEcH0kLmFq YXgoez0KdXJsOm4rIi9saXN0X3RyYWNrcz8iKyQucGFyYW0ociksZGF0YVR5cGU6Imh0bWwiLGVy cm9yOmZ1bmN0aW9uKCl7by5tb2RhbC5zPQpob3coe3RpdGxlOiJTb21ldGhpbmcgd2VudCB3cm9u ZyEiLGJvZHk6IlVuZm9ydHVuYXRlbHkgd2UgY291bGQgbm90IGFkZCB0aGk9CnMgZGF0YXNldCB0 byB0aGUgdHJhY2sgYnJvd3Nlci4gUGxlYXNlIHRyeSBhZ2FpbiBvciBjb250YWN0IHVzLiIsYnV0 dG9uczp7Qz0KYW5jZWw6ZnVuY3Rpb24oKXtvLm1vZGFsLmhpZGUoKX19fSl9LHN1Y2Nlc3M6ZnVu Y3Rpb24ocyl7by5tb2RhbC5zaG93KHt0aXRsPQplOiJWaWV3IERhdGEgaW4gYSBOZXcgb3IgU2F2 ZWQgVmlzdWFsaXphdGlvbiIsYnV0dG9uczp7Q2FuY2VsOmZ1bmN0aW9uKCl7by49Cm1vZGFsLmhp ZGUoKX0sIlZpZXcgaW4gc2F2ZWQgdmlzdWFsaXphdGlvbiI6ZnVuY3Rpb24oKXtvLm1vZGFsLnNo b3coe3RpdGxlOj0KIkFkZCBEYXRhIHRvIFNhdmVkIFZpc3VhbGl6YXRpb24iLGJvZHk6cyxidXR0 b25zOntDYW5jZWw6ZnVuY3Rpb24oKXtvLm1vZGFsPQouaGlkZSgpfSwiQWRkIHRvIHZpc3VhbGl6 YXRpb24iOmZ1bmN0aW9uKCl7by5tb2RhbC5oaWRlKCk7by5tb2RhbC4kZWwuZmluZCg9CiJpbnB1 dFtuYW1lPTNEaWRdOmNoZWNrZWQiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9M0QkKHRoaXMpLnZh bCgpO3EuaWQ9M0R0Oz0Kby5mcmFtZS5hZGQoe3RpdGxlOiJUcmFja3N0ZXIiLHR5cGU6InVybCIs Y29udGVudDpuKyIvdHJhY2tzdGVyPyIrJC5wYXJhbShxPQopfSl9KX19fSl9LCJWaWV3IGluIG5l dyB2aXN1YWxpemF0aW9uIjpmdW5jdGlvbigpe28ubW9kYWwuaGlkZSgpO28uZnJhbWUuYWQ9CmQo e3RpdGxlOiJUcmFja3N0ZXIiLHR5cGU6InVybCIsY29udGVudDpuKyIvdHJhY2tzdGVyPyIrJC5w YXJhbShxKX0pfX19KX19KT0KO3JldHVybiBmYWxzZX19fSk7dmFyIGw9M0RmdW5jdGlvbihxLG8s cixuKXt2YXIgcD0zRG5ldyBvKHttb2RlbDpuZXcgcShyKX0pPQo7cC5yZW5kZXIoKTtpZihuKXtu LmFwcGVuZChwLiRlbCl9cmV0dXJuIHB9O3ZhciBjPTNEZnVuY3Rpb24ocCl7aWYoIXAubW9kZWw9 Cil7cC5tb2RlbD0zRG5ldyBpKHAuZGF0YXNldF9jb25maWcpfXZhciBvPTNEcC5wYXJlbnRfZWx0 O3ZhciBxPTNEcC5lbWJlZGRlZD0KO2RlbGV0ZSBwLmVtYmVkZGVkO2RlbGV0ZSBwLnBhcmVudF9l bHQ7ZGVsZXRlIHAuZGF0YXNldF9jb25maWc7dmFyIG49M0QocT9uPQpldyBtKHApOm5ldyBnKHAp KTtuLnJlbmRlcigpO2lmKG8pe28uYXBwZW5kKG4uJGVsKTtuLmV4cGFuZF90b19jb250YWluZXIo KX09CnJldHVybiBufTtyZXR1cm57RGF0YXNldDpiLFRhYnVsYXJEYXRhc2V0OmksRGF0YXNldENv bGxlY3Rpb246ZSxUYWJ1bGFyRGF0YT0Kc2V0Q2h1bmtlZFZpZXc6YSxjcmVhdGVUYWJ1bGFyRGF0 YXNldENodW5rZWRWaWV3OmN9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGVmaW5l KFsibXZjL3VpL3VpLW1vZGFsIiwibXZjL3VpL3VpLWZyYW1lcyIsIm12Yy91aS9pY29uLWJ1dHRv biJdLGZ1bmN0aW89Cm4oayxqLGYpe3ZhciBoPTNEQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHt9KTt2 YXIgYj0zREJhY2tib25lLk1vZGVsLmV4dGVuZCh7ZD0KZWZhdWx0czp7aWQ6IiIsdHlwZToiIixu YW1lOiIiLGhkYV9sZGRhOiJoZGEiLG1ldGFkYXRhOm51bGx9LGluaXRpYWxpemU6ZnVuPQpjdGlv bigpe2lmKCF0aGlzLmdldCgibWV0YWRhdGEiKSl7dGhpcy5fc2V0X21ldGFkYXRhKCl9dGhpcy5v bigiY2hhbmdlIix0aGk9CnMuX3NldF9tZXRhZGF0YSx0aGlzKX0sX3NldF9tZXRhZGF0YTpmdW5j dGlvbigpe3ZhciBuPTNEbmV3IGgoKTtfLmVhY2goXy5rZT0KeXModGhpcy5hdHRyaWJ1dGVzKSxm dW5jdGlvbihvKXtpZihvLmluZGV4T2YoIm1ldGFkYXRhXyIpPTNEPTNEPTNEMCl7dmFyIHA9Cj0z RG8uc3BsaXQoIm1ldGFkYXRhXyIpWzFdO24uc2V0KHAsdGhpcy5hdHRyaWJ1dGVzW29dKTtkZWxl dGUgdGhpcy5hdHRyaWJ1dD0KZXNbb119fSx0aGlzKTt0aGlzLnNldCgibWV0YWRhdGEiLG4se3Np bGVudDp0cnVlfSl9LGdldF9tZXRhZGF0YTpmdW5jdGlvbihuPQope3JldHVybiB0aGlzLmF0dHJp YnV0ZXMubWV0YWRhdGEuZ2V0KG4pfSx1cmxSb290OmdhbGF4eV9jb25maWcucm9vdCsiYXBpL2Q9 CmF0YXNldHMifSk7dmFyIGk9M0RiLmV4dGVuZCh7ZGVmYXVsdHM6Xy5leHRlbmQoe30sYi5wcm90 b3R5cGUuZGVmYXVsdHMse2NodT0KbmtfdXJsOm51bGwsZmlyc3RfZGF0YV9jaHVuazpudWxsLGNo dW5rX2luZGV4Oi0xLGF0X2VvZjpmYWxzZX0pLGluaXRpYWxpemU6PQpmdW5jdGlvbihuKXtiLnBy b3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyk7dGhpcy5hdHRyaWJ1dGVzLmNodW5rX2luZGV4 PQo9M0QodGhpcy5hdHRyaWJ1dGVzLmZpcnN0X2RhdGFfY2h1bms/MTowKTt0aGlzLmF0dHJpYnV0 ZXMuY2h1bmtfdXJsPTNEZ2FsYXg9CnlfY29uZmlnLnJvb3QrImRhdGFzZXQvZGlzcGxheT9kYXRh c2V0X2lkPTNEIit0aGlzLmlkO3RoaXMuYXR0cmlidXRlcy51cmxfdj0KaXo9M0RnYWxheHlfY29u ZmlnLnJvb3QrInZpc3VhbGl6YXRpb24ifSxnZXRfbmV4dF9jaHVuazpmdW5jdGlvbigpe2lmKHRo aXMuPQphdHRyaWJ1dGVzLmF0X2VvZil7cmV0dXJuIG51bGx9dmFyIG49M0R0aGlzLG89M0QkLkRl ZmVycmVkKCk7JC5nZXRKU09OKHRoaXM9Ci5hdHRyaWJ1dGVzLmNodW5rX3VybCx7Y2h1bms6bi5h dHRyaWJ1dGVzLmNodW5rX2luZGV4Kyt9KS5zdWNjZXNzKGZ1bmN0aW9uKD0KcCl7dmFyIHE7aWYo cC5ja19kYXRhIT0zRD0zRCIiKXtxPTNEcH1lbHNle24uYXR0cmlidXRlcy5hdF9lb2Y9M0R0cnVl O3E9M0RuPQp1bGx9by5yZXNvbHZlKHEpfSk7cmV0dXJuIG99fSk7dmFyIGU9M0RCYWNrYm9uZS5D b2xsZWN0aW9uLmV4dGVuZCh7bW9kZWw6Yn09Cik7dmFyIGE9M0RCYWNrYm9uZS5WaWV3LmV4dGVu ZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihuKXt0aGlzLnJvd19jb3VudD0zRDA7dD0KaGlzLmxvYWRp bmdfY2h1bms9M0RmYWxzZTt0aGlzLmhlYWRlcl9jb2xvcj0zRCIjQUFBIjt0aGlzLmRhcmtfcm93 X2NvbG9yPTNEPQoiI0RERCI7bmV3IGQoe21vZGVsOm4ubW9kZWwsJGVsOnRoaXMuJGVsfSl9LGV4 cGFuZF90b19jb250YWluZXI6ZnVuY3Rpb24oKXs9CmlmKHRoaXMuJGVsLmhlaWdodCgpPHRoaXMu c2Nyb2xsX2VsdC5oZWlnaHQoKSl7dGhpcy5hdHRlbXB0X3RvX2ZldGNoKCl9fSxhdD0KdGVtcHRf dG9fZmV0Y2g6ZnVuY3Rpb24obyl7dmFyIG49M0R0aGlzO2lmKCF0aGlzLmxvYWRpbmdfY2h1bmsm JnRoaXMuc2Nyb2xsPQplZF90b19ib3R0b20oKSl7dGhpcy5sb2FkaW5nX2NodW5rPTNEdHJ1ZTt0 aGlzLmxvYWRpbmdfaW5kaWNhdG9yLnNob3coKTskLnc9CmhlbihuLm1vZGVsLmdldF9uZXh0X2No dW5rKCkpLnRoZW4oZnVuY3Rpb24ocCl7aWYocCl7bi5fcmVuZGVyQ2h1bmsocCk7bi5sbz0KYWRp bmdfY2h1bms9M0RmYWxzZX1uLmxvYWRpbmdfaW5kaWNhdG9yLmhpZGUoKTtuLmV4cGFuZF90b19j b250YWluZXIoKX0pfX0sPQpyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmxvYWRpbmdfaW5kaWNhdG9y PTNEJCgiPGRpdi8+IikuYXR0cigiaWQiLCJsb2FkaW5nX2k9Cm5kaWNhdG9yIik7dGhpcy4kZWwu YXBwZW5kKHRoaXMubG9hZGluZ19pbmRpY2F0b3IpO3ZhciByPTNEJCgiPHRhYmxlLz4iKS5hdD0K dHIoe2lkOiJjb250ZW50X3RhYmxlIixjZWxscGFkZGluZzowfSk7dGhpcy4kZWwuYXBwZW5kKHIp O3ZhciBuPTNEdGhpcy5tb2RlPQpsLmdldF9tZXRhZGF0YSgiY29sdW1uX25hbWVzIikscz0zRCQo Ijx0ci8+IikuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIix0aGlzLmg9CmVhZGVyX2NvbG9yKS5hcHBl bmRUbyhyKTtpZihuKXtzLmFwcGVuZCgiPHRoPiIrbi5qb2luKCI8L3RoPjx0aD4iKSsiPC90aD4i KT0KfWVsc2V7Zm9yKHZhciBxPTNEMTtxPD0zRHRoaXMubW9kZWwuZ2V0X21ldGFkYXRhKCJjb2x1 bW5zIik7cSsrKXtzLmFwcGVuZCgiPQo8dGg+IitxKyI8L3RoPiIpfX12YXIgcD0zRHRoaXMsbz0z RHRoaXMubW9kZWwuZ2V0KCJmaXJzdF9kYXRhX2NodW5rIik7aWYobyk9Cnt0aGlzLl9yZW5kZXJD aHVuayhvKX1lbHNleyQud2hlbihwLm1vZGVsLmdldF9uZXh0X2NodW5rKCkpLnRoZW4oZnVuY3Rp b24odD0KKXtwLl9yZW5kZXJDaHVuayh0KX0pfXRoaXMuc2Nyb2xsX2VsdC5zY3JvbGwoZnVuY3Rp b24oKXtwLmF0dGVtcHRfdG9fZmV0Y2goPQopfSl9LHNjcm9sbGVkX3RvX2JvdHRvbTpmdW5jdGlv bigpe3JldHVybiBmYWxzZX0sX3JlbmRlckNlbGw6ZnVuY3Rpb24ocSxuLHI9Cil7dmFyIG89M0Qk KCI8dGQ+IikudGV4dChxKTt2YXIgcD0zRHRoaXMubW9kZWwuZ2V0X21ldGFkYXRhKCJjb2x1bW5f dHlwZXMiKT0KO2lmKHIhPTNEPTNEdW5kZWZpbmVkKXtvLmF0dHIoImNvbHNwYW4iLHIpLmFkZENs YXNzKCJzdHJpbmdhbGlnbiIpfWVsc2V7aWYoPQpwKXtpZihuPHAubGVuZ3RoKXtpZihwW25dPTNE PTNEPTNEInN0ciJ8fHBbbl09M0Q9M0Q9M0QibGlzdCIpe28uYWRkQ2xhc3MoInM9CnRyaW5nYWxp Z24iKX19fX1yZXR1cm4gb30sX3JlbmRlclJvdzpmdW5jdGlvbihuKXt2YXIgbz0zRG4uc3BsaXQo Ilx0IikscT0zRD0KJCgiPHRyPiIpLHA9M0R0aGlzLm1vZGVsLmdldF9tZXRhZGF0YSgiY29sdW1u cyIpO2lmKHRoaXMucm93X2NvdW50JTIhPTNEPTNEPQowKXtxLmNzcygiYmFja2dyb3VuZC1jb2xv ciIsdGhpcy5kYXJrX3Jvd19jb2xvcil9aWYoby5sZW5ndGg9M0Q9M0Q9M0RwKXtfLmU9CmFjaChv LGZ1bmN0aW9uKHMscil7cS5hcHBlbmQodGhpcy5fcmVuZGVyQ2VsbChzLHIpKX0sdGhpcyl9ZWxz ZXtpZihvLmxlbmd0aD0KPnApe18uZWFjaChvLnNsaWNlKDAscC0xKSxmdW5jdGlvbihzLHIpe3Eu YXBwZW5kKHRoaXMuX3JlbmRlckNlbGwocyxyKSl9LHRoPQppcyk7cS5hcHBlbmQodGhpcy5fcmVu ZGVyQ2VsbChvLnNsaWNlKHAtMSkuam9pbigiXHQiKSxwLTEpKX1lbHNle2lmKHA+NSYmby49Cmxl bmd0aD0zRD0zRD0zRHAtMSl7Xy5lYWNoKG8sZnVuY3Rpb24ocyxyKXtxLmFwcGVuZCh0aGlzLl9y ZW5kZXJDZWxsKHMscikpfT0KLHRoaXMpO3EuYXBwZW5kKCQoIjx0ZD4iKSl9ZWxzZXtxLmFwcGVu ZCh0aGlzLl9yZW5kZXJDZWxsKG4sMCxwKSl9fX10aGlzLnJvPQp3X2NvdW50Kys7cmV0dXJuIHF9 LF9yZW5kZXJDaHVuazpmdW5jdGlvbihuKXt2YXIgbz0zRHRoaXMuJGVsLmZpbmQoInRhYmxlIik9 CjtfLmVhY2gobi5ja19kYXRhLnNwbGl0KCJcbiIpLGZ1bmN0aW9uKHAscSl7aWYocCE9M0Q9M0Qi Iil7by5hcHBlbmQodGhpcy5fcj0KZW5kZXJSb3cocCkpfX0sdGhpcyl9fSk7dmFyIGc9M0RhLmV4 dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihuKXthLnByb3RvdHlwPQplLmluaXRpYWxpemUuY2Fs bCh0aGlzLG4pO3Njcm9sbF9lbHQ9M0RfLmZpbmQodGhpcy4kZWwucGFyZW50cygpLGZ1bmN0aW9u KG89Cil7cmV0dXJuICQobykuY3NzKCJvdmVyZmxvdyIpPTNEPTNEPTNEImF1dG8ifSk7aWYoIXNj cm9sbF9lbHQpe3Njcm9sbF9lbHQ9Cj0zRHdpbmRvd310aGlzLnNjcm9sbF9lbHQ9M0QkKHNjcm9s bF9lbHQpfSxzY3JvbGxlZF90b19ib3R0b206ZnVuY3Rpb24oKXtyZT0KdHVybih0aGlzLiRlbC5o ZWlnaHQoKS10aGlzLnNjcm9sbF9lbHQuc2Nyb2xsVG9wKCktdGhpcy5zY3JvbGxfZWx0LmhlaWdo dCgpPQo8PTNEMCl9fSk7dmFyIG09M0RhLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihuKXth LnByb3RvdHlwZS5pbml0aWFsaXplLmM9CmFsbCh0aGlzLG4pO3RoaXMuc2Nyb2xsX2VsdD0zRHRo aXMuJGVsLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoicz0KY3JvbGwiLGhlaWdo dDp0aGlzLm9wdGlvbnMuaGVpZ2h0fHwiNTAwcHgifSl9LHNjcm9sbGVkX3RvX2JvdHRvbTpmdW5j dGlvbigpPQp7cmV0dXJuIHRoaXMuJGVsLnNjcm9sbFRvcCgpK3RoaXMuJGVsLmlubmVySGVpZ2h0 KCk+PTNEdGhpcy5lbC5zY3JvbGxIZWlnaHQ9Cn19KTt2YXIgZD0zREJhY2tib25lLlZpZXcuZXh0 ZW5kKHtjb2w6e2Nocm9tOm51bGwsc3RhcnQ6bnVsbCxlbmQ6bnVsbH0sdXJsXz0Kdml6Om51bGws ZGF0YXNldF9pZDpudWxsLGdlbm9tZV9idWlsZDpudWxsLGZpbGVfZXh0Om51bGwsaW5pdGlhbGl6 ZTpmdW5jdGlvPQpuKHApe3ZhciBzPTNEcGFyZW50LkdhbGF4eTtpZihzJiZzLm1vZGFsKXt0aGlz Lm1vZGFsPTNEcy5tb2RhbH1pZihzJiZzLmZyYW09CmUpe3RoaXMuZnJhbWU9M0RzLmZyYW1lfWlm KCF0aGlzLm1vZGFsfHwhdGhpcy5mcmFtZSl7cmV0dXJufXZhciBvPTNEcC5tb2RlbD0KO3ZhciBy PTNEby5nZXQoIm1ldGFkYXRhIik7aWYoIW8uZ2V0KCJmaWxlX2V4dCIpKXtyZXR1cm59dGhpcy5m aWxlX2V4dD0zRG8uPQpnZXQoImZpbGVfZXh0Iik7aWYodGhpcy5maWxlX2V4dD0zRD0zRCJiZWQi KXtpZihyLmdldCgiY2hyb21Db2wiKSYmci5nZXQoInM9CnRhcnRDb2wiKSYmci5nZXQoImVuZENv bCIpKXt0aGlzLmNvbC5jaHJvbT0zRHIuZ2V0KCJjaHJvbUNvbCIpLTE7dGhpcy5jb2wucz0KdGFy dD0zRHIuZ2V0KCJzdGFydENvbCIpLTE7dGhpcy5jb2wuZW5kPTNEci5nZXQoImVuZENvbCIpLTF9 ZWxzZXtjb25zb2xlLmxvPQpnKCJUYWJ1bGFyQnV0dG9uVHJhY2tzdGVyIDogQmVkLWZpbGUgbWV0 YWRhdGEgaW5jb21wbGV0ZS4iKTtyZXR1cm59fWlmKHRoaXM9Ci5maWxlX2V4dD0zRD0zRCJ2Y2Yi KXtmdW5jdGlvbiBxKHUsdil7Zm9yKHZhciB0PTNEMDt0PHYubGVuZ3RoO3QrKyl7aWYodlt0XT0K Lm1hdGNoKHUpKXtyZXR1cm4gdH19cmV0dXJuIC0xfXRoaXMuY29sLmNocm9tPTNEcSgiQ2hyb20i LHIuZ2V0KCJjb2x1bW5fbmFtPQplcyIpKTt0aGlzLmNvbC5zdGFydD0zRHEoIlBvcyIsci5nZXQo ImNvbHVtbl9uYW1lcyIpKTt0aGlzLmNvbC5lbmQ9M0RudWxsO2k9CmYodGhpcy5jb2wuY2hyb209 M0Q9M0QtMXx8dGhpcy5jb2wuc3RhcnQ9M0Q9M0QtMSl7Y29uc29sZS5sb2coIlRhYnVsYXJCdXR0 bz0KblRyYWNrc3RlciA6IFZDRi1maWxlIG1ldGFkYXRhIGluY29tcGxldGUuIik7cmV0dXJufX1p Zih0aGlzLmNvbC5jaHJvbT0zRD0KPTNEPTNEdW5kZWZpbmVkKXtyZXR1cm59aWYoby5pZCl7dGhp cy5kYXRhc2V0X2lkPTNEby5pZH1lbHNle2NvbnNvbGUubG9nKCJUPQphYnVsYXJCdXR0b25UcmFj a3N0ZXIgOiBEYXRhc2V0IGlkZW50aWZpY2F0aW9uIGlzIG1pc3NpbmcuIik7cmV0dXJufWlmKG8u Z2U9CnQoInVybF92aXoiKSl7dGhpcy51cmxfdml6PTNEby5nZXQoInVybF92aXoiKX1lbHNle2Nv bnNvbGUubG9nKCJUYWJ1bGFyQnV0dD0Kb25UcmFja3N0ZXIgOiBVcmwgZm9yIHZpc3VhbGl6YXRp b24gY29udHJvbGxlciBpcyBtaXNzaW5nLiIpO3JldHVybn1pZihvLmdlPQp0KCJnZW5vbWVfYnVp bGQiKSl7dGhpcy5nZW5vbWVfYnVpbGQ9M0RvLmdldCgiZ2Vub21lX2J1aWxkIil9dmFyIG49M0Ru ZXcgZi49Ckljb25CdXR0b25WaWV3KHttb2RlbDpuZXcgZi5JY29uQnV0dG9uKHt0aXRsZToiVmlz dWFsaXplIixpY29uX2NsYXNzOiJjaGFydD0KX2N1cnZlIixpZDoiYnRuX3ZpeiJ9KX0pO3RoaXMu c2V0RWxlbWVudChwLiRlbCk7dGhpcy4kZWwuYXBwZW5kKG4ucmVuZGVyKCkuPQokZWwpO3RoaXMu aGlkZSgpfSxldmVudHM6eyJtb3VzZW92ZXIgdHIiOiJzaG93Iixtb3VzZWxlYXZlOiJoaWRlIn0s c2hvdzpmdW49CmN0aW9uKHMpe2Z1bmN0aW9uIHIoeCl7cmV0dXJuICFpc05hTihwYXJzZUZsb2F0 KHgpKSYmaXNGaW5pdGUoeCl9aWYodGhpcy5jbz0KbC5jaHJvbT0zRD0zRD0zRG51bGwpe3JldHVy bn12YXIgdz0zRCQocy50YXJnZXQpLnBhcmVudCgpO3ZhciB0PTNEdy5jaGlsZHJlPQpuKCkuZXEo dGhpcy5jb2wuY2hyb20pLmh0bWwoKTt2YXIgbj0zRHcuY2hpbGRyZW4oKS5lcSh0aGlzLmNvbC5z dGFydCkuaHRtbCg9Cik7dmFyIHA9M0R0aGlzLmNvbC5lbmQ/dy5jaGlsZHJlbigpLmVxKHRoaXMu Y29sLmVuZCkuaHRtbCgpOm47aWYoIXQubWF0Y2goIj0KXiMiKSYmdCE9M0Q9M0QiIiYmcihuKSl7 dmFyIHY9M0R7ZGF0YXNldF9pZDp0aGlzLmRhdGFzZXRfaWQsZ2VuZV9yZWdpb246dCsiPQo6Iitu KyItIitwfTt2YXIgcT0zRHcub2Zmc2V0KCk7dmFyIG89M0RxLmxlZnQtMTA7dmFyIHU9M0RxLnRv cC0kKHdpbmRvdykuc2M9CnJvbGxUb3AoKSszOyQoIiNidG5fdml6IikuY3NzKHtwb3NpdGlvbjoi Zml4ZWQiLHRvcDp1KyJweCIsbGVmdDpvKyJweCJ9KTskKD0KIiNidG5fdml6Iikub2ZmKCJjbGlj ayIpOyQoIiNidG5fdml6IikuY2xpY2sodGhpcy5jcmVhdGVfdHJhY2tzdGVyX2FjdGlvbih0PQpo aXMudXJsX3Zpeix2LHRoaXMuZ2Vub21lX2J1aWxkKSk7JCgiI2J0bl92aXoiKS5zaG93KCl9ZWxz ZXskKCIjYnRuX3ZpeiIpLmg9CmlkZSgpfX0saGlkZTpmdW5jdGlvbigpe3RoaXMuJGVsLmZpbmQo IiNidG5fdml6IikuaGlkZSgpfSxjcmVhdGVfdHJhY2tzdGVyXz0KYWN0aW9uOmZ1bmN0aW9uKG4s cSxwKXt2YXIgbz0zRHRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9M0R7fTtpZihwKXtyWyJm PQotZGJrZXkiXT0zRHB9JC5hamF4KHt1cmw6bisiL2xpc3RfdHJhY2tzPyIrJC5wYXJhbShyKSxk YXRhVHlwZToiaHRtbCIsZXJyb3I9CjpmdW5jdGlvbigpe28ubW9kYWwuc2hvdyh7dGl0bGU6IlNv bWV0aGluZyB3ZW50IHdyb25nISIsYm9keToiVW5mb3J0dW5hdGVseT0KIHdlIGNvdWxkIG5vdCBh ZGQgdGhpcyBkYXRhc2V0IHRvIHRoZSB0cmFjayBicm93c2VyLiBQbGVhc2UgdHJ5IGFnYWluIG9y IGNvPQpudGFjdCB1cy4iLGJ1dHRvbnM6e0NhbmNlbDpmdW5jdGlvbigpe28ubW9kYWwuaGlkZSgp fX19KX0sc3VjY2VzczpmdW5jdGlvbig9CnMpe28ubW9kYWwuc2hvdyh7dGl0bGU6IlZpZXcgRGF0 YSBpbiBhIE5ldyBvciBTYXZlZCBWaXN1YWxpemF0aW9uIixidXR0b25zOj0Ke0NhbmNlbDpmdW5j dGlvbigpe28ubW9kYWwuaGlkZSgpfSwiVmlldyBpbiBzYXZlZCB2aXN1YWxpemF0aW9uIjpmdW5j dGlvbigpPQp7by5tb2RhbC5zaG93KHt0aXRsZToiQWRkIERhdGEgdG8gU2F2ZWQgVmlzdWFsaXph dGlvbiIsYm9keTpzLGJ1dHRvbnM6e0NhbmM9CmVsOmZ1bmN0aW9uKCl7by5tb2RhbC5oaWRlKCl9 LCJBZGQgdG8gdmlzdWFsaXphdGlvbiI6ZnVuY3Rpb24oKXtvLm1vZGFsLmhpZD0KZSgpO28ubW9k YWwuJGVsLmZpbmQoImlucHV0W25hbWU9M0RpZF06Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24oKXt2 YXIgdD0zRCQoPQp0aGlzKS52YWwoKTtxLmlkPTNEdDtvLmZyYW1lLmFkZCh7dGl0bGU6IlRyYWNr c3RlciIsdHlwZToidXJsIixjb250ZW50Om4rIi89CnRyYWNrc3Rlcj8iKyQucGFyYW0ocSl9KX0p fX19KX0sIlZpZXcgaW4gbmV3IHZpc3VhbGl6YXRpb24iOmZ1bmN0aW9uKCl7by5tbz0KZGFsLmhp ZGUoKTtvLmZyYW1lLmFkZCh7dGl0bGU6IlRyYWNrc3RlciIsdHlwZToidXJsIixjb250ZW50Om4r Ii90cmFja3N0ZXI/PQoiKyQucGFyYW0ocSl9KX19fSl9fSk7cmV0dXJuIGZhbHNlfX19KTt2YXIg bD0zRGZ1bmN0aW9uKHEsbyxyLG4pe3ZhciBwPTNEbmU9Cncgbyh7bW9kZWw6bmV3IHEocil9KTtw LnJlbmRlcigpO2lmKG4pe24uYXBwZW5kKHAuJGVsKX1yZXR1cm4gcH07dmFyIGM9M0RmdT0KbmN0 aW9uKHApe2lmKCFwLm1vZGVsKXtwLm1vZGVsPTNEbmV3IGkocC5kYXRhc2V0X2NvbmZpZyl9dmFy IG89M0RwLnBhcmVudF9lPQpsdDt2YXIgcT0zRHAuZW1iZWRkZWQ7ZGVsZXRlIHAuZW1iZWRkZWQ7 ZGVsZXRlIHAucGFyZW50X2VsdDtkZWxldGUgcC5kYXRhc2U9CnRfY29uZmlnO3ZhciBuPTNEKHE/ bmV3IG0ocCk6bmV3IGcocCkpO24ucmVuZGVyKCk7aWYobyl7by5hcHBlbmQobi4kZWwpO24uZT0K eHBhbmRfdG9fY29udGFpbmVyKCl9cmV0dXJuIG59O3JldHVybntEYXRhc2V0OmIsVGFidWxhckRh dGFzZXQ6aSxEYXRhc2V0Q29sPQpsZWN0aW9uOmUsVGFidWxhckRhdGFzZXRDaHVua2VkVmlldzph LGNyZWF0ZVRhYnVsYXJEYXRhc2V0Q2h1bmtlZFZpZXc6Y319KTsKXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9j b21taXRzLzM2NDU3Y2MxZWMyNi8KQ2hhbmdlc2V0OiAgIDM2NDU3Y2MxZWMyNgpVc2VyOiAgICAg ICAgZGFubm9uCkRhdGU6ICAgICAgICAyMDE0LTEyLTE1IDE0OjQ3OjQ1KzAwOjAwClN1bW1hcnk6 ICAgICBTd2FwIHRhYnVsYXIgcmVuZGVyaW5nIGZyb20gdXNpbmcgaW5saW5lIGNzcyB0byBhcHBs eWluZyBzdHlsZT0KcyBmb3Igcm93L2hlYWRlci4KQWZmZWN0ZWQgIzogIDUgZmlsZXMKCmRpZmYg LXIgOGVjNjkwNTI2MDBhMmM5MTVmODhkMzE4NTg4NGExODVlODIwODZkMSAtciAzNjQ1N2NjMWVj MjZjNDQwZTdhOTk2Yz0KZTUxZWI4N2VkN2M1OGNjNGQgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212 Yy9kYXRhLmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvZGF0YS5qcworKysgYi9j bGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL2RhdGEuanMKQEAgLTEyOCwxMCArMTI4LDYgQEAKICAg ICAgICAgdGhpcy5yb3dfY291bnQgPTNEIDA7CiAgICAgICAgIHRoaXMubG9hZGluZ19jaHVuayA9 M0QgZmFsc2U7Cj0yMAotICAgICAgICAvLyBDU1MgY29sb3JzIHVzZWQgaW4gdGFibGUuCi0gICAg ICAgIHRoaXMuaGVhZGVyX2NvbG9yID0zRCAnI0FBQSc7Ci0gICAgICAgIHRoaXMuZGFya19yb3df Y29sb3IgPTNEICcjREREJzsKLQogICAgICAgICAvLyBsb2FkIHRyYWNrc3RlciBidXR0b24KICAg ICAgICAgbmV3IFRhYnVsYXJCdXR0b25UcmFja3N0ZXJWaWV3KHsKICAgICAgICAgICAgIG1vZGVs ICAgOiBvcHRpb25zLm1vZGVsLApAQCAtMTczLDcgKzE2OSw3IEBACiAgICAgICAgIH0pOwogICAg ICAgICB0aGlzLiRlbC5hcHBlbmQoZGF0YV90YWJsZSk7CiAgICAgICAgIHZhciBjb2x1bW5fbmFt ZXMgPTNEIHRoaXMubW9kZWwuZ2V0X21ldGFkYXRhKCdjb2x1bW5fbmFtZXMnKSwKLSAgICAgICAg ICAgIGhlYWRlcl9yb3cgPTNEICQoJzx0ci8+JykuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhp cy5oZWFkZXJfPQpjb2xvcikuYXBwZW5kVG8oZGF0YV90YWJsZSk7CisgICAgICAgICAgICBoZWFk ZXJfcm93ID0zRCAkKCc8dHIvPicpLmFwcGVuZFRvKGRhdGFfdGFibGUpOwogICAgICAgICBpZiAo Y29sdW1uX25hbWVzKSB7CiAgICAgICAgICAgICBoZWFkZXJfcm93LmFwcGVuZCgnPHRoPicgKyBj b2x1bW5fbmFtZXMuam9pbignPC90aD48dGg+JykgKyAnPD0KL3RoPicpOwogICAgICAgICB9IGVs c2UgewpAQCAtMjM2LDcgKzIzMiw3IEBACiAgICAgICAgICAgICBudW1fY29sdW1ucyA9M0QgdGhp cy5tb2RlbC5nZXRfbWV0YWRhdGEoJ2NvbHVtbnMnKTsKPTIwCiAgICAgICAgIGlmICh0aGlzLnJv d19jb3VudCAlIDIgIT0zRD0zRCAwKSB7Ci0gICAgICAgICAgICByb3cuY3NzKCdiYWNrZ3JvdW5k LWNvbG9yJywgdGhpcy5kYXJrX3Jvd19jb2xvcik7CisgICAgICAgICAgICByb3cuYWRkQ2xhc3Mo J2Rhcmtfcm93Jyk7CiAgICAgICAgIH0KPTIwCiAgICAgICAgIGlmIChjZWxscy5sZW5ndGggPTNE PTNEPTNEIG51bV9jb2x1bW5zKSB7CgpkaWZmIC1yIDhlYzY5MDUyNjAwYTJjOTE1Zjg4ZDMxODU4 ODRhMTg1ZTgyMDg2ZDEgLXIgMzY0NTdjYzFlYzI2YzQ0MGU3YTk5NmM9CmU1MWViODdlZDdjNThj YzRkIHN0YXRpYy9zY3JpcHRzL212Yy9kYXRhLmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL212Yy9k YXRhLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL212Yy9kYXRhLmpzCkBAIC0xMjgsMTAgKzEyOCw2 IEBACiAgICAgICAgIHRoaXMucm93X2NvdW50ID0zRCAwOwogICAgICAgICB0aGlzLmxvYWRpbmdf Y2h1bmsgPTNEIGZhbHNlOwo9MjAKLSAgICAgICAgLy8gQ1NTIGNvbG9ycyB1c2VkIGluIHRhYmxl LgotICAgICAgICB0aGlzLmhlYWRlcl9jb2xvciA9M0QgJyNBQUEnOwotICAgICAgICB0aGlzLmRh cmtfcm93X2NvbG9yID0zRCAnI0RERCc7Ci0KICAgICAgICAgLy8gbG9hZCB0cmFja3N0ZXIgYnV0 dG9uCiAgICAgICAgIG5ldyBUYWJ1bGFyQnV0dG9uVHJhY2tzdGVyVmlldyh7CiAgICAgICAgICAg ICBtb2RlbCAgIDogb3B0aW9ucy5tb2RlbCwKQEAgLTE3Myw3ICsxNjksNyBAQAogICAgICAgICB9 KTsKICAgICAgICAgdGhpcy4kZWwuYXBwZW5kKGRhdGFfdGFibGUpOwogICAgICAgICB2YXIgY29s dW1uX25hbWVzID0zRCB0aGlzLm1vZGVsLmdldF9tZXRhZGF0YSgnY29sdW1uX25hbWVzJyksCi0g ICAgICAgICAgICBoZWFkZXJfcm93ID0zRCAkKCc8dHIvPicpLmNzcygnYmFja2dyb3VuZC1jb2xv cicsIHRoaXMuaGVhZGVyXz0KY29sb3IpLmFwcGVuZFRvKGRhdGFfdGFibGUpOworICAgICAgICAg ICAgaGVhZGVyX3JvdyA9M0QgJCgnPHRyLz4nKS5hcHBlbmRUbyhkYXRhX3RhYmxlKTsKICAgICAg ICAgaWYgKGNvbHVtbl9uYW1lcykgewogICAgICAgICAgICAgaGVhZGVyX3Jvdy5hcHBlbmQoJzx0 aD4nICsgY29sdW1uX25hbWVzLmpvaW4oJzwvdGg+PHRoPicpICsgJzw9Ci90aD4nKTsKICAgICAg ICAgfSBlbHNlIHsKQEAgLTIzNiw3ICsyMzIsNyBAQAogICAgICAgICAgICAgbnVtX2NvbHVtbnMg PTNEIHRoaXMubW9kZWwuZ2V0X21ldGFkYXRhKCdjb2x1bW5zJyk7Cj0yMAogICAgICAgICBpZiAo dGhpcy5yb3dfY291bnQgJSAyICE9M0Q9M0QgMCkgewotICAgICAgICAgICAgcm93LmNzcygnYmFj a2dyb3VuZC1jb2xvcicsIHRoaXMuZGFya19yb3dfY29sb3IpOworICAgICAgICAgICAgcm93LmFk ZENsYXNzKCdkYXJrX3JvdycpOwogICAgICAgICB9Cj0yMAogICAgICAgICBpZiAoY2VsbHMubGVu Z3RoID0zRD0zRD0zRCBudW1fY29sdW1ucykgewoKZGlmZiAtciA4ZWM2OTA1MjYwMGEyYzkxNWY4 OGQzMTg1ODg0YTE4NWU4MjA4NmQxIC1yIDM2NDU3Y2MxZWMyNmM0NDBlN2E5OTZjPQplNTFlYjg3 ZWQ3YzU4Y2M0ZCBzdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL2RhdGEuanMKLS0tIGEvc3RhdGlj L3NjcmlwdHMvcGFja2VkL212Yy9kYXRhLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9t dmMvZGF0YS5qcwpAQCAtMSwxICsxLDEgQEAKLWRlZmluZShbIm12Yy91aS91aS1tb2RhbCIsIm12 Yy91aS91aS1mcmFtZXMiLCJtdmMvdWkvaWNvbi1idXR0b24iXSxmdW5jdGlvPQpuKGssaixmKXt2 YXIgaD0zREJhY2tib25lLk1vZGVsLmV4dGVuZCh7fSk7dmFyIGI9M0RCYWNrYm9uZS5Nb2RlbC5l eHRlbmQoe2Q9CmVmYXVsdHM6e2lkOiIiLHR5cGU6IiIsbmFtZToiIixoZGFfbGRkYToiaGRhIixt ZXRhZGF0YTpudWxsfSxpbml0aWFsaXplOmZ1bj0KY3Rpb24oKXtpZighdGhpcy5nZXQoIm1ldGFk YXRhIikpe3RoaXMuX3NldF9tZXRhZGF0YSgpfXRoaXMub24oImNoYW5nZSIsdGhpPQpzLl9zZXRf bWV0YWRhdGEsdGhpcyl9LF9zZXRfbWV0YWRhdGE6ZnVuY3Rpb24oKXt2YXIgbj0zRG5ldyBoKCk7 Xy5lYWNoKF8ua2U9CnlzKHRoaXMuYXR0cmlidXRlcyksZnVuY3Rpb24obyl7aWYoby5pbmRleE9m KCJtZXRhZGF0YV8iKT0zRD0zRD0zRDApe3ZhciBwPQo9M0RvLnNwbGl0KCJtZXRhZGF0YV8iKVsx XTtuLnNldChwLHRoaXMuYXR0cmlidXRlc1tvXSk7ZGVsZXRlIHRoaXMuYXR0cmlidXQ9CmVzW29d fX0sdGhpcyk7dGhpcy5zZXQoIm1ldGFkYXRhIixuLHtzaWxlbnQ6dHJ1ZX0pfSxnZXRfbWV0YWRh dGE6ZnVuY3Rpb24obj0KKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzLm1ldGFkYXRhLmdldChuKX0s dXJsUm9vdDpnYWxheHlfY29uZmlnLnJvb3QrImFwaS9kPQphdGFzZXRzIn0pO3ZhciBpPTNEYi5l eHRlbmQoe2RlZmF1bHRzOl8uZXh0ZW5kKHt9LGIucHJvdG90eXBlLmRlZmF1bHRzLHtjaHU9Cm5r X3VybDpudWxsLGZpcnN0X2RhdGFfY2h1bms6bnVsbCxjaHVua19pbmRleDotMSxhdF9lb2Y6ZmFs c2V9KSxpbml0aWFsaXplOj0KZnVuY3Rpb24obil7Yi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxs KHRoaXMpO3RoaXMuYXR0cmlidXRlcy5jaHVua19pbmRleD0KPTNEKHRoaXMuYXR0cmlidXRlcy5m aXJzdF9kYXRhX2NodW5rPzE6MCk7dGhpcy5hdHRyaWJ1dGVzLmNodW5rX3VybD0zRGdhbGF4PQp5 X2NvbmZpZy5yb290KyJkYXRhc2V0L2Rpc3BsYXk/ZGF0YXNldF9pZD0zRCIrdGhpcy5pZDt0aGlz LmF0dHJpYnV0ZXMudXJsX3Y9Cml6PTNEZ2FsYXh5X2NvbmZpZy5yb290KyJ2aXN1YWxpemF0aW9u In0sZ2V0X25leHRfY2h1bms6ZnVuY3Rpb24oKXtpZih0aGlzLj0KYXR0cmlidXRlcy5hdF9lb2Yp e3JldHVybiBudWxsfXZhciBuPTNEdGhpcyxvPTNEJC5EZWZlcnJlZCgpOyQuZ2V0SlNPTih0aGlz PQouYXR0cmlidXRlcy5jaHVua191cmwse2NodW5rOm4uYXR0cmlidXRlcy5jaHVua19pbmRleCsr fSkuc3VjY2VzcyhmdW5jdGlvbig9CnApe3ZhciBxO2lmKHAuY2tfZGF0YSE9M0Q9M0QiIil7cT0z RHB9ZWxzZXtuLmF0dHJpYnV0ZXMuYXRfZW9mPTNEdHJ1ZTtxPTNEbj0KdWxsfW8ucmVzb2x2ZShx KX0pO3JldHVybiBvfX0pO3ZhciBlPTNEQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoe21vZGVs OmJ9PQopO3ZhciBhPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24o bil7dGhpcy5yb3dfY291bnQ9M0QwO3Q9Cmhpcy5sb2FkaW5nX2NodW5rPTNEZmFsc2U7dGhpcy5o ZWFkZXJfY29sb3I9M0QiI0FBQSI7dGhpcy5kYXJrX3Jvd19jb2xvcj0zRD0KIiNEREQiO25ldyBk KHttb2RlbDpuLm1vZGVsLCRlbDp0aGlzLiRlbH0pfSxleHBhbmRfdG9fY29udGFpbmVyOmZ1bmN0 aW9uKCl7PQppZih0aGlzLiRlbC5oZWlnaHQoKTx0aGlzLnNjcm9sbF9lbHQuaGVpZ2h0KCkpe3Ro aXMuYXR0ZW1wdF90b19mZXRjaCgpfX0sYXQ9CnRlbXB0X3RvX2ZldGNoOmZ1bmN0aW9uKG8pe3Zh ciBuPTNEdGhpcztpZighdGhpcy5sb2FkaW5nX2NodW5rJiZ0aGlzLnNjcm9sbD0KZWRfdG9fYm90 dG9tKCkpe3RoaXMubG9hZGluZ19jaHVuaz0zRHRydWU7dGhpcy5sb2FkaW5nX2luZGljYXRvci5z aG93KCk7JC53PQpoZW4obi5tb2RlbC5nZXRfbmV4dF9jaHVuaygpKS50aGVuKGZ1bmN0aW9uKHAp e2lmKHApe24uX3JlbmRlckNodW5rKHApO24ubG89CmFkaW5nX2NodW5rPTNEZmFsc2V9bi5sb2Fk aW5nX2luZGljYXRvci5oaWRlKCk7bi5leHBhbmRfdG9fY29udGFpbmVyKCl9KX19LD0KcmVuZGVy OmZ1bmN0aW9uKCl7dGhpcy5sb2FkaW5nX2luZGljYXRvcj0zRCQoIjxkaXYvPiIpLmF0dHIoImlk IiwibG9hZGluZ19pPQpuZGljYXRvciIpO3RoaXMuJGVsLmFwcGVuZCh0aGlzLmxvYWRpbmdfaW5k aWNhdG9yKTt2YXIgcj0zRCQoIjx0YWJsZS8+IikuYXQ9CnRyKHtpZDoiY29udGVudF90YWJsZSIs Y2VsbHBhZGRpbmc6MH0pO3RoaXMuJGVsLmFwcGVuZChyKTt2YXIgbj0zRHRoaXMubW9kZT0KbC5n ZXRfbWV0YWRhdGEoImNvbHVtbl9uYW1lcyIpLHM9M0QkKCI8dHIvPiIpLmNzcygiYmFja2dyb3Vu ZC1jb2xvciIsdGhpcy5oPQplYWRlcl9jb2xvcikuYXBwZW5kVG8ocik7aWYobil7cy5hcHBlbmQo Ijx0aD4iK24uam9pbigiPC90aD48dGg+IikrIjwvdGg+Iik9Cn1lbHNle2Zvcih2YXIgcT0zRDE7 cTw9M0R0aGlzLm1vZGVsLmdldF9tZXRhZGF0YSgiY29sdW1ucyIpO3ErKyl7cy5hcHBlbmQoIj0K PHRoPiIrcSsiPC90aD4iKX19dmFyIHA9M0R0aGlzLG89M0R0aGlzLm1vZGVsLmdldCgiZmlyc3Rf ZGF0YV9jaHVuayIpO2lmKG8pPQp7dGhpcy5fcmVuZGVyQ2h1bmsobyl9ZWxzZXskLndoZW4ocC5t b2RlbC5nZXRfbmV4dF9jaHVuaygpKS50aGVuKGZ1bmN0aW9uKHQ9Cil7cC5fcmVuZGVyQ2h1bmso dCl9KX10aGlzLnNjcm9sbF9lbHQuc2Nyb2xsKGZ1bmN0aW9uKCl7cC5hdHRlbXB0X3RvX2ZldGNo KD0KKX0pfSxzY3JvbGxlZF90b19ib3R0b206ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9LF9yZW5k ZXJDZWxsOmZ1bmN0aW9uKHEsbixyPQope3ZhciBvPTNEJCgiPHRkPiIpLnRleHQocSk7dmFyIHA9 M0R0aGlzLm1vZGVsLmdldF9tZXRhZGF0YSgiY29sdW1uX3R5cGVzIik9CjtpZihyIT0zRD0zRHVu ZGVmaW5lZCl7by5hdHRyKCJjb2xzcGFuIixyKS5hZGRDbGFzcygic3RyaW5nYWxpZ24iKX1lbHNl e2lmKD0KcCl7aWYobjxwLmxlbmd0aCl7aWYocFtuXT0zRD0zRD0zRCJzdHIifHxwW25dPTNEPTNE PTNEImxpc3QiKXtvLmFkZENsYXNzKCJzPQp0cmluZ2FsaWduIil9fX19cmV0dXJuIG99LF9yZW5k ZXJSb3c6ZnVuY3Rpb24obil7dmFyIG89M0RuLnNwbGl0KCJcdCIpLHE9M0Q9CiQoIjx0cj4iKSxw PTNEdGhpcy5tb2RlbC5nZXRfbWV0YWRhdGEoImNvbHVtbnMiKTtpZih0aGlzLnJvd19jb3VudCUy IT0zRD0zRD0KMCl7cS5jc3MoImJhY2tncm91bmQtY29sb3IiLHRoaXMuZGFya19yb3dfY29sb3Ip fWlmKG8ubGVuZ3RoPTNEPTNEPTNEcCl7Xy5lPQphY2gobyxmdW5jdGlvbihzLHIpe3EuYXBwZW5k KHRoaXMuX3JlbmRlckNlbGwocyxyKSl9LHRoaXMpfWVsc2V7aWYoby5sZW5ndGg9Cj5wKXtfLmVh Y2goby5zbGljZSgwLHAtMSksZnVuY3Rpb24ocyxyKXtxLmFwcGVuZCh0aGlzLl9yZW5kZXJDZWxs KHMscikpfSx0aD0KaXMpO3EuYXBwZW5kKHRoaXMuX3JlbmRlckNlbGwoby5zbGljZShwLTEpLmpv aW4oIlx0IikscC0xKSl9ZWxzZXtpZihwPjUmJm8uPQpsZW5ndGg9M0Q9M0Q9M0RwLTEpe18uZWFj aChvLGZ1bmN0aW9uKHMscil7cS5hcHBlbmQodGhpcy5fcmVuZGVyQ2VsbChzLHIpKX09Cix0aGlz KTtxLmFwcGVuZCgkKCI8dGQ+IikpfWVsc2V7cS5hcHBlbmQodGhpcy5fcmVuZGVyQ2VsbChuLDAs cCkpfX19dGhpcy5ybz0Kd19jb3VudCsrO3JldHVybiBxfSxfcmVuZGVyQ2h1bms6ZnVuY3Rpb24o bil7dmFyIG89M0R0aGlzLiRlbC5maW5kKCJ0YWJsZSIpPQo7Xy5lYWNoKG4uY2tfZGF0YS5zcGxp dCgiXG4iKSxmdW5jdGlvbihwLHEpe2lmKHAhPTNEPTNEIiIpe28uYXBwZW5kKHRoaXMuX3I9CmVu ZGVyUm93KHApKX19LHRoaXMpfX0pO3ZhciBnPTNEYS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rp b24obil7YS5wcm90b3R5cD0KZS5pbml0aWFsaXplLmNhbGwodGhpcyxuKTtzY3JvbGxfZWx0PTNE Xy5maW5kKHRoaXMuJGVsLnBhcmVudHMoKSxmdW5jdGlvbihvPQope3JldHVybiAkKG8pLmNzcygi b3ZlcmZsb3ciKT0zRD0zRD0zRCJhdXRvIn0pO2lmKCFzY3JvbGxfZWx0KXtzY3JvbGxfZWx0PQo9 M0R3aW5kb3d9dGhpcy5zY3JvbGxfZWx0PTNEJChzY3JvbGxfZWx0KX0sc2Nyb2xsZWRfdG9fYm90 dG9tOmZ1bmN0aW9uKCl7cmU9CnR1cm4odGhpcy4kZWwuaGVpZ2h0KCktdGhpcy5zY3JvbGxfZWx0 LnNjcm9sbFRvcCgpLXRoaXMuc2Nyb2xsX2VsdC5oZWlnaHQoKT0KPD0zRDApfX0pO3ZhciBtPTNE YS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24obil7YS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5j PQphbGwodGhpcyxuKTt0aGlzLnNjcm9sbF9lbHQ9M0R0aGlzLiRlbC5jc3Moe3Bvc2l0aW9uOiJy ZWxhdGl2ZSIsb3ZlcmZsb3c6InM9CmNyb2xsIixoZWlnaHQ6dGhpcy5vcHRpb25zLmhlaWdodHx8 IjUwMHB4In0pfSxzY3JvbGxlZF90b19ib3R0b206ZnVuY3Rpb24oKT0Ke3JldHVybiB0aGlzLiRl bC5zY3JvbGxUb3AoKSt0aGlzLiRlbC5pbm5lckhlaWdodCgpPj0zRHRoaXMuZWwuc2Nyb2xsSGVp Z2h0PQp9fSk7dmFyIGQ9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7Y29sOntjaHJvbTpudWxsLHN0 YXJ0Om51bGwsZW5kOm51bGx9LHVybF89CnZpejpudWxsLGRhdGFzZXRfaWQ6bnVsbCxnZW5vbWVf YnVpbGQ6bnVsbCxmaWxlX2V4dDpudWxsLGluaXRpYWxpemU6ZnVuY3Rpbz0KbihwKXt2YXIgcz0z RHBhcmVudC5HYWxheHk7aWYocyYmcy5tb2RhbCl7dGhpcy5tb2RhbD0zRHMubW9kYWx9aWYocyYm cy5mcmFtPQplKXt0aGlzLmZyYW1lPTNEcy5mcmFtZX1pZighdGhpcy5tb2RhbHx8IXRoaXMuZnJh bWUpe3JldHVybn12YXIgbz0zRHAubW9kZWw9Cjt2YXIgcj0zRG8uZ2V0KCJtZXRhZGF0YSIpO2lm KCFvLmdldCgiZmlsZV9leHQiKSl7cmV0dXJufXRoaXMuZmlsZV9leHQ9M0RvLj0KZ2V0KCJmaWxl X2V4dCIpO2lmKHRoaXMuZmlsZV9leHQ9M0Q9M0QiYmVkIil7aWYoci5nZXQoImNocm9tQ29sIikm JnIuZ2V0KCJzPQp0YXJ0Q29sIikmJnIuZ2V0KCJlbmRDb2wiKSl7dGhpcy5jb2wuY2hyb209M0Ry LmdldCgiY2hyb21Db2wiKS0xO3RoaXMuY29sLnM9CnRhcnQ9M0RyLmdldCgic3RhcnRDb2wiKS0x O3RoaXMuY29sLmVuZD0zRHIuZ2V0KCJlbmRDb2wiKS0xfWVsc2V7Y29uc29sZS5sbz0KZygiVGFi dWxhckJ1dHRvblRyYWNrc3RlciA6IEJlZC1maWxlIG1ldGFkYXRhIGluY29tcGxldGUuIik7cmV0 dXJufX1pZih0aGlzPQouZmlsZV9leHQ9M0Q9M0QidmNmIil7ZnVuY3Rpb24gcSh1LHYpe2Zvcih2 YXIgdD0zRDA7dDx2Lmxlbmd0aDt0Kyspe2lmKHZbdF09Ci5tYXRjaCh1KSl7cmV0dXJuIHR9fXJl dHVybiAtMX10aGlzLmNvbC5jaHJvbT0zRHEoIkNocm9tIixyLmdldCgiY29sdW1uX25hbT0KZXMi KSk7dGhpcy5jb2wuc3RhcnQ9M0RxKCJQb3MiLHIuZ2V0KCJjb2x1bW5fbmFtZXMiKSk7dGhpcy5j b2wuZW5kPTNEbnVsbDtpPQpmKHRoaXMuY29sLmNocm9tPTNEPTNELTF8fHRoaXMuY29sLnN0YXJ0 PTNEPTNELTEpe2NvbnNvbGUubG9nKCJUYWJ1bGFyQnV0dG89Cm5UcmFja3N0ZXIgOiBWQ0YtZmls ZSBtZXRhZGF0YSBpbmNvbXBsZXRlLiIpO3JldHVybn19aWYodGhpcy5jb2wuY2hyb209M0Q9Cj0z RD0zRHVuZGVmaW5lZCl7cmV0dXJufWlmKG8uaWQpe3RoaXMuZGF0YXNldF9pZD0zRG8uaWR9ZWxz ZXtjb25zb2xlLmxvZygiVD0KYWJ1bGFyQnV0dG9uVHJhY2tzdGVyIDogRGF0YXNldCBpZGVudGlm aWNhdGlvbiBpcyBtaXNzaW5nLiIpO3JldHVybn1pZihvLmdlPQp0KCJ1cmxfdml6Iikpe3RoaXMu dXJsX3Zpej0zRG8uZ2V0KCJ1cmxfdml6Iil9ZWxzZXtjb25zb2xlLmxvZygiVGFidWxhckJ1dHQ9 Cm9uVHJhY2tzdGVyIDogVXJsIGZvciB2aXN1YWxpemF0aW9uIGNvbnRyb2xsZXIgaXMgbWlzc2lu Zy4iKTtyZXR1cm59aWYoby5nZT0KdCgiZ2Vub21lX2J1aWxkIikpe3RoaXMuZ2Vub21lX2J1aWxk PTNEby5nZXQoImdlbm9tZV9idWlsZCIpfXZhciBuPTNEbmV3IGYuPQpJY29uQnV0dG9uVmlldyh7 bW9kZWw6bmV3IGYuSWNvbkJ1dHRvbih7dGl0bGU6IlZpc3VhbGl6ZSIsaWNvbl9jbGFzczoiY2hh cnQ9Cl9jdXJ2ZSIsaWQ6ImJ0bl92aXoifSl9KTt0aGlzLnNldEVsZW1lbnQocC4kZWwpO3RoaXMu JGVsLmFwcGVuZChuLnJlbmRlcigpLj0KJGVsKTt0aGlzLmhpZGUoKX0sZXZlbnRzOnsibW91c2Vv dmVyIHRyIjoic2hvdyIsbW91c2VsZWF2ZToiaGlkZSJ9LHNob3c6ZnVuPQpjdGlvbihzKXtmdW5j dGlvbiByKHgpe3JldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh4KSkmJmlzRmluaXRlKHgpfWlmKHRo aXMuY289CmwuY2hyb209M0Q9M0Q9M0RudWxsKXtyZXR1cm59dmFyIHc9M0QkKHMudGFyZ2V0KS5w YXJlbnQoKTt2YXIgdD0zRHcuY2hpbGRyZT0KbigpLmVxKHRoaXMuY29sLmNocm9tKS5odG1sKCk7 dmFyIG49M0R3LmNoaWxkcmVuKCkuZXEodGhpcy5jb2wuc3RhcnQpLmh0bWwoPQopO3ZhciBwPTNE dGhpcy5jb2wuZW5kP3cuY2hpbGRyZW4oKS5lcSh0aGlzLmNvbC5lbmQpLmh0bWwoKTpuO2lmKCF0 Lm1hdGNoKCI9Cl4jIikmJnQhPTNEPTNEIiImJnIobikpe3ZhciB2PTNEe2RhdGFzZXRfaWQ6dGhp cy5kYXRhc2V0X2lkLGdlbmVfcmVnaW9uOnQrIj0KOiIrbisiLSIrcH07dmFyIHE9M0R3Lm9mZnNl dCgpO3ZhciBvPTNEcS5sZWZ0LTEwO3ZhciB1PTNEcS50b3AtJCh3aW5kb3cpLnNjPQpyb2xsVG9w KCkrMzskKCIjYnRuX3ZpeiIpLmNzcyh7cG9zaXRpb246ImZpeGVkIix0b3A6dSsicHgiLGxlZnQ6 bysicHgifSk7JCg9CiIjYnRuX3ZpeiIpLm9mZigiY2xpY2siKTskKCIjYnRuX3ZpeiIpLmNsaWNr KHRoaXMuY3JlYXRlX3RyYWNrc3Rlcl9hY3Rpb24odD0KaGlzLnVybF92aXosdix0aGlzLmdlbm9t ZV9idWlsZCkpOyQoIiNidG5fdml6Iikuc2hvdygpfWVsc2V7JCgiI2J0bl92aXoiKS5oPQppZGUo KX19LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC5maW5kKCIjYnRuX3ZpeiIpLmhpZGUoKX0sY3Jl YXRlX3RyYWNrc3Rlcl89CmFjdGlvbjpmdW5jdGlvbihuLHEscCl7dmFyIG89M0R0aGlzO3JldHVy biBmdW5jdGlvbigpe3ZhciByPTNEe307aWYocCl7clsiZj0KLWRia2V5Il09M0RwfSQuYWpheCh7 dXJsOm4rIi9saXN0X3RyYWNrcz8iKyQucGFyYW0ociksZGF0YVR5cGU6Imh0bWwiLGVycm9yPQo6 ZnVuY3Rpb24oKXtvLm1vZGFsLnNob3coe3RpdGxlOiJTb21ldGhpbmcgd2VudCB3cm9uZyEiLGJv ZHk6IlVuZm9ydHVuYXRlbHk9CiB3ZSBjb3VsZCBub3QgYWRkIHRoaXMgZGF0YXNldCB0byB0aGUg dHJhY2sgYnJvd3Nlci4gUGxlYXNlIHRyeSBhZ2FpbiBvciBjbz0KbnRhY3QgdXMuIixidXR0b25z OntDYW5jZWw6ZnVuY3Rpb24oKXtvLm1vZGFsLmhpZGUoKX19fSl9LHN1Y2Nlc3M6ZnVuY3Rpb24o PQpzKXtvLm1vZGFsLnNob3coe3RpdGxlOiJWaWV3IERhdGEgaW4gYSBOZXcgb3IgU2F2ZWQgVmlz dWFsaXphdGlvbiIsYnV0dG9uczo9CntDYW5jZWw6ZnVuY3Rpb24oKXtvLm1vZGFsLmhpZGUoKX0s IlZpZXcgaW4gc2F2ZWQgdmlzdWFsaXphdGlvbiI6ZnVuY3Rpb24oKT0Ke28ubW9kYWwuc2hvdyh7 dGl0bGU6IkFkZCBEYXRhIHRvIFNhdmVkIFZpc3VhbGl6YXRpb24iLGJvZHk6cyxidXR0b25zOntD YW5jPQplbDpmdW5jdGlvbigpe28ubW9kYWwuaGlkZSgpfSwiQWRkIHRvIHZpc3VhbGl6YXRpb24i OmZ1bmN0aW9uKCl7by5tb2RhbC5oaWQ9CmUoKTtvLm1vZGFsLiRlbC5maW5kKCJpbnB1dFtuYW1l PTNEaWRdOmNoZWNrZWQiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9M0QkKD0KdGhpcykudmFsKCk7 cS5pZD0zRHQ7by5mcmFtZS5hZGQoe3RpdGxlOiJUcmFja3N0ZXIiLHR5cGU6InVybCIsY29udGVu dDpuKyIvPQp0cmFja3N0ZXI/IiskLnBhcmFtKHEpfSl9KX19fSl9LCJWaWV3IGluIG5ldyB2aXN1 YWxpemF0aW9uIjpmdW5jdGlvbigpe28ubW89CmRhbC5oaWRlKCk7by5mcmFtZS5hZGQoe3RpdGxl OiJUcmFja3N0ZXIiLHR5cGU6InVybCIsY29udGVudDpuKyIvdHJhY2tzdGVyPz0KIiskLnBhcmFt KHEpfSl9fX0pfX0pO3JldHVybiBmYWxzZX19fSk7dmFyIGw9M0RmdW5jdGlvbihxLG8scixuKXt2 YXIgcD0zRG5lPQp3IG8oe21vZGVsOm5ldyBxKHIpfSk7cC5yZW5kZXIoKTtpZihuKXtuLmFwcGVu ZChwLiRlbCl9cmV0dXJuIHB9O3ZhciBjPTNEZnU9Cm5jdGlvbihwKXtpZighcC5tb2RlbCl7cC5t b2RlbD0zRG5ldyBpKHAuZGF0YXNldF9jb25maWcpfXZhciBvPTNEcC5wYXJlbnRfZT0KbHQ7dmFy IHE9M0RwLmVtYmVkZGVkO2RlbGV0ZSBwLmVtYmVkZGVkO2RlbGV0ZSBwLnBhcmVudF9lbHQ7ZGVs ZXRlIHAuZGF0YXNlPQp0X2NvbmZpZzt2YXIgbj0zRChxP25ldyBtKHApOm5ldyBnKHApKTtuLnJl bmRlcigpO2lmKG8pe28uYXBwZW5kKG4uJGVsKTtuLmU9CnhwYW5kX3RvX2NvbnRhaW5lcigpfXJl dHVybiBufTtyZXR1cm57RGF0YXNldDpiLFRhYnVsYXJEYXRhc2V0OmksRGF0YXNldENvbD0KbGVj dGlvbjplLFRhYnVsYXJEYXRhc2V0Q2h1bmtlZFZpZXc6YSxjcmVhdGVUYWJ1bGFyRGF0YXNldENo dW5rZWRWaWV3OmN9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGVmaW5lKFsibXZj L3VpL3VpLW1vZGFsIiwibXZjL3VpL3VpLWZyYW1lcyIsIm12Yy91aS9pY29uLWJ1dHRvbiJdLGZ1 bmN0aW89Cm4oayxqLGYpe3ZhciBoPTNEQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHt9KTt2YXIgYj0z REJhY2tib25lLk1vZGVsLmV4dGVuZCh7ZD0KZWZhdWx0czp7aWQ6IiIsdHlwZToiIixuYW1lOiIi LGhkYV9sZGRhOiJoZGEiLG1ldGFkYXRhOm51bGx9LGluaXRpYWxpemU6ZnVuPQpjdGlvbigpe2lm KCF0aGlzLmdldCgibWV0YWRhdGEiKSl7dGhpcy5fc2V0X21ldGFkYXRhKCl9dGhpcy5vbigiY2hh bmdlIix0aGk9CnMuX3NldF9tZXRhZGF0YSx0aGlzKX0sX3NldF9tZXRhZGF0YTpmdW5jdGlvbigp e3ZhciBuPTNEbmV3IGgoKTtfLmVhY2goXy5rZT0KeXModGhpcy5hdHRyaWJ1dGVzKSxmdW5jdGlv bihvKXtpZihvLmluZGV4T2YoIm1ldGFkYXRhXyIpPTNEPTNEPTNEMCl7dmFyIHA9Cj0zRG8uc3Bs aXQoIm1ldGFkYXRhXyIpWzFdO24uc2V0KHAsdGhpcy5hdHRyaWJ1dGVzW29dKTtkZWxldGUgdGhp cy5hdHRyaWJ1dD0KZXNbb119fSx0aGlzKTt0aGlzLnNldCgibWV0YWRhdGEiLG4se3NpbGVudDp0 cnVlfSl9LGdldF9tZXRhZGF0YTpmdW5jdGlvbihuPQope3JldHVybiB0aGlzLmF0dHJpYnV0ZXMu bWV0YWRhdGEuZ2V0KG4pfSx1cmxSb290OmdhbGF4eV9jb25maWcucm9vdCsiYXBpL2Q9CmF0YXNl dHMifSk7dmFyIGk9M0RiLmV4dGVuZCh7ZGVmYXVsdHM6Xy5leHRlbmQoe30sYi5wcm90b3R5cGUu ZGVmYXVsdHMse2NodT0KbmtfdXJsOm51bGwsZmlyc3RfZGF0YV9jaHVuazpudWxsLGNodW5rX2lu ZGV4Oi0xLGF0X2VvZjpmYWxzZX0pLGluaXRpYWxpemU6PQpmdW5jdGlvbihuKXtiLnByb3RvdHlw ZS5pbml0aWFsaXplLmNhbGwodGhpcyk7dGhpcy5hdHRyaWJ1dGVzLmNodW5rX2luZGV4PQo9M0Qo dGhpcy5hdHRyaWJ1dGVzLmZpcnN0X2RhdGFfY2h1bms/MTowKTt0aGlzLmF0dHJpYnV0ZXMuY2h1 bmtfdXJsPTNEZ2FsYXg9CnlfY29uZmlnLnJvb3QrImRhdGFzZXQvZGlzcGxheT9kYXRhc2V0X2lk PTNEIit0aGlzLmlkO3RoaXMuYXR0cmlidXRlcy51cmxfdj0KaXo9M0RnYWxheHlfY29uZmlnLnJv b3QrInZpc3VhbGl6YXRpb24ifSxnZXRfbmV4dF9jaHVuazpmdW5jdGlvbigpe2lmKHRoaXMuPQph dHRyaWJ1dGVzLmF0X2VvZil7cmV0dXJuIG51bGx9dmFyIG49M0R0aGlzLG89M0QkLkRlZmVycmVk KCk7JC5nZXRKU09OKHRoaXM9Ci5hdHRyaWJ1dGVzLmNodW5rX3VybCx7Y2h1bms6bi5hdHRyaWJ1 dGVzLmNodW5rX2luZGV4Kyt9KS5zdWNjZXNzKGZ1bmN0aW9uKD0KcCl7dmFyIHE7aWYocC5ja19k YXRhIT0zRD0zRCIiKXtxPTNEcH1lbHNle24uYXR0cmlidXRlcy5hdF9lb2Y9M0R0cnVlO3E9M0Ru PQp1bGx9by5yZXNvbHZlKHEpfSk7cmV0dXJuIG99fSk7dmFyIGU9M0RCYWNrYm9uZS5Db2xsZWN0 aW9uLmV4dGVuZCh7bW9kZWw6Yn09Cik7dmFyIGE9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7aW5p dGlhbGl6ZTpmdW5jdGlvbihuKXt0aGlzLnJvd19jb3VudD0zRDA7dD0KaGlzLmxvYWRpbmdfY2h1 bms9M0RmYWxzZTtuZXcgZCh7bW9kZWw6bi5tb2RlbCwkZWw6dGhpcy4kZWx9KX0sZXhwYW5kX3Rv X2NvPQpudGFpbmVyOmZ1bmN0aW9uKCl7aWYodGhpcy4kZWwuaGVpZ2h0KCk8dGhpcy5zY3JvbGxf ZWx0LmhlaWdodCgpKXt0aGlzLmF0dGU9Cm1wdF90b19mZXRjaCgpfX0sYXR0ZW1wdF90b19mZXRj aDpmdW5jdGlvbihvKXt2YXIgbj0zRHRoaXM7aWYoIXRoaXMubG9hZGluZz0KX2NodW5rJiZ0aGlz LnNjcm9sbGVkX3RvX2JvdHRvbSgpKXt0aGlzLmxvYWRpbmdfY2h1bms9M0R0cnVlO3RoaXMubG9h ZGluZ19pPQpuZGljYXRvci5zaG93KCk7JC53aGVuKG4ubW9kZWwuZ2V0X25leHRfY2h1bmsoKSku dGhlbihmdW5jdGlvbihwKXtpZihwKXtuLl89CnJlbmRlckNodW5rKHApO24ubG9hZGluZ19jaHVu az0zRGZhbHNlfW4ubG9hZGluZ19pbmRpY2F0b3IuaGlkZSgpO24uZXhwYW5kXz0KdG9fY29udGFp bmVyKCl9KX19LHJlbmRlcjpmdW5jdGlvbigpe3RoaXMubG9hZGluZ19pbmRpY2F0b3I9M0QkKCI8 ZGl2Lz4iKS5hPQp0dHIoImlkIiwibG9hZGluZ19pbmRpY2F0b3IiKTt0aGlzLiRlbC5hcHBlbmQo dGhpcy5sb2FkaW5nX2luZGljYXRvcik7dmFyIHI9Cj0zRCQoIjx0YWJsZS8+IikuYXR0cih7aWQ6 ImNvbnRlbnRfdGFibGUiLGNlbGxwYWRkaW5nOjB9KTt0aGlzLiRlbC5hcHBlbmQocj0KKTt2YXIg bj0zRHRoaXMubW9kZWwuZ2V0X21ldGFkYXRhKCJjb2x1bW5fbmFtZXMiKSxzPTNEJCgiPHRyLz4i KS5hcHBlbmRUbyhyPQopO2lmKG4pe3MuYXBwZW5kKCI8dGg+IituLmpvaW4oIjwvdGg+PHRoPiIp KyI8L3RoPiIpfWVsc2V7Zm9yKHZhciBxPTNEMTtxPD0KPTNEdGhpcy5tb2RlbC5nZXRfbWV0YWRh dGEoImNvbHVtbnMiKTtxKyspe3MuYXBwZW5kKCI8dGg+IitxKyI8L3RoPiIpfX12YXIgPQpwPTNE dGhpcyxvPTNEdGhpcy5tb2RlbC5nZXQoImZpcnN0X2RhdGFfY2h1bmsiKTtpZihvKXt0aGlzLl9y ZW5kZXJDaHVuayhvKX09CmVsc2V7JC53aGVuKHAubW9kZWwuZ2V0X25leHRfY2h1bmsoKSkudGhl bihmdW5jdGlvbih0KXtwLl9yZW5kZXJDaHVuayh0KX0pfT0KdGhpcy5zY3JvbGxfZWx0LnNjcm9s bChmdW5jdGlvbigpe3AuYXR0ZW1wdF90b19mZXRjaCgpfSl9LHNjcm9sbGVkX3RvX2JvdHRvPQpt OmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxfcmVuZGVyQ2VsbDpmdW5jdGlvbihxLG4scil7dmFy IG89M0QkKCI8dGQ+IikudGU9Cnh0KHEpO3ZhciBwPTNEdGhpcy5tb2RlbC5nZXRfbWV0YWRhdGEo ImNvbHVtbl90eXBlcyIpO2lmKHIhPTNEPTNEdW5kZWZpbmVkKT0Ke28uYXR0cigiY29sc3BhbiIs cikuYWRkQ2xhc3MoInN0cmluZ2FsaWduIil9ZWxzZXtpZihwKXtpZihuPHAubGVuZ3RoKXtpZihw PQpbbl09M0Q9M0Q9M0Qic3RyInx8cFtuXT0zRD0zRD0zRCJsaXN0Iil7by5hZGRDbGFzcygic3Ry aW5nYWxpZ24iKX19fX1yZXR1cm49CiBvfSxfcmVuZGVyUm93OmZ1bmN0aW9uKG4pe3ZhciBvPTNE bi5zcGxpdCgiXHQiKSxxPTNEJCgiPHRyPiIpLHA9M0R0aGlzLm1vZD0KZWwuZ2V0X21ldGFkYXRh KCJjb2x1bW5zIik7aWYodGhpcy5yb3dfY291bnQlMiE9M0Q9M0QwKXtxLmFkZENsYXNzKCJkYXJr X3JvPQp3Iil9aWYoby5sZW5ndGg9M0Q9M0Q9M0RwKXtfLmVhY2gobyxmdW5jdGlvbihzLHIpe3Eu YXBwZW5kKHRoaXMuX3JlbmRlckNlbGw9CihzLHIpKX0sdGhpcyl9ZWxzZXtpZihvLmxlbmd0aD5w KXtfLmVhY2goby5zbGljZSgwLHAtMSksZnVuY3Rpb24ocyxyKXtxLmFwcD0KZW5kKHRoaXMuX3Jl bmRlckNlbGwocyxyKSl9LHRoaXMpO3EuYXBwZW5kKHRoaXMuX3JlbmRlckNlbGwoby5zbGljZShw LTEpLmpvPQppbigiXHQiKSxwLTEpKX1lbHNle2lmKHA+NSYmby5sZW5ndGg9M0Q9M0Q9M0RwLTEp e18uZWFjaChvLGZ1bmN0aW9uKHMscil7cS49CmFwcGVuZCh0aGlzLl9yZW5kZXJDZWxsKHMscikp fSx0aGlzKTtxLmFwcGVuZCgkKCI8dGQ+IikpfWVsc2V7cS5hcHBlbmQodGhpcz0KLl9yZW5kZXJD ZWxsKG4sMCxwKSl9fX10aGlzLnJvd19jb3VudCsrO3JldHVybiBxfSxfcmVuZGVyQ2h1bms6ZnVu Y3Rpb24obil7PQp2YXIgbz0zRHRoaXMuJGVsLmZpbmQoInRhYmxlIik7Xy5lYWNoKG4uY2tfZGF0 YS5zcGxpdCgiXG4iKSxmdW5jdGlvbihwLHEpe2k9CmYocCE9M0Q9M0QiIil7by5hcHBlbmQodGhp cy5fcmVuZGVyUm93KHApKX19LHRoaXMpfX0pO3ZhciBnPTNEYS5leHRlbmQoe2luaT0KdGlhbGl6 ZTpmdW5jdGlvbihuKXthLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxuKTtzY3JvbGxf ZWx0PTNEXy5maW5kPQoodGhpcy4kZWwucGFyZW50cygpLGZ1bmN0aW9uKG8pe3JldHVybiAkKG8p LmNzcygib3ZlcmZsb3ciKT0zRD0zRD0zRCJhdXRvIn09Cik7aWYoIXNjcm9sbF9lbHQpe3Njcm9s bF9lbHQ9M0R3aW5kb3d9dGhpcy5zY3JvbGxfZWx0PTNEJChzY3JvbGxfZWx0KX0sc2Nybz0KbGxl ZF90b19ib3R0b206ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy4kZWwuaGVpZ2h0KCktdGhpcy5zY3Jv bGxfZWx0LnNjcm9sbFRvPQpwKCktdGhpcy5zY3JvbGxfZWx0LmhlaWdodCgpPD0zRDApfX0pO3Zh ciBtPTNEYS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb249CihuKXthLnByb3RvdHlwZS5pbml0 aWFsaXplLmNhbGwodGhpcyxuKTt0aGlzLnNjcm9sbF9lbHQ9M0R0aGlzLiRlbC5jc3Moe3Bvcz0K aXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoic2Nyb2xsIixoZWlnaHQ6dGhpcy5vcHRpb25zLmhl aWdodHx8IjUwMHB4In0pfSxzPQpjcm9sbGVkX3RvX2JvdHRvbTpmdW5jdGlvbigpe3JldHVybiB0 aGlzLiRlbC5zY3JvbGxUb3AoKSt0aGlzLiRlbC5pbm5lckhlaWc9Cmh0KCk+PTNEdGhpcy5lbC5z Y3JvbGxIZWlnaHR9fSk7dmFyIGQ9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7Y29sOntjaHJvbTpu dT0KbGwsc3RhcnQ6bnVsbCxlbmQ6bnVsbH0sdXJsX3ZpejpudWxsLGRhdGFzZXRfaWQ6bnVsbCxn ZW5vbWVfYnVpbGQ6bnVsbCxmaWxlPQpfZXh0Om51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbihwKXt2 YXIgcz0zRHBhcmVudC5HYWxheHk7aWYocyYmcy5tb2RhbCl7dGhpcy49Cm1vZGFsPTNEcy5tb2Rh bH1pZihzJiZzLmZyYW1lKXt0aGlzLmZyYW1lPTNEcy5mcmFtZX1pZighdGhpcy5tb2RhbHx8IXRo aXMuZj0KcmFtZSl7cmV0dXJufXZhciBvPTNEcC5tb2RlbDt2YXIgcj0zRG8uZ2V0KCJtZXRhZGF0 YSIpO2lmKCFvLmdldCgiZmlsZV9leHQiPQopKXtyZXR1cm59dGhpcy5maWxlX2V4dD0zRG8uZ2V0 KCJmaWxlX2V4dCIpO2lmKHRoaXMuZmlsZV9leHQ9M0Q9M0QiYmVkIil7aWY9CihyLmdldCgiY2hy b21Db2wiKSYmci5nZXQoInN0YXJ0Q29sIikmJnIuZ2V0KCJlbmRDb2wiKSl7dGhpcy5jb2wuY2hy b209M0RyLj0KZ2V0KCJjaHJvbUNvbCIpLTE7dGhpcy5jb2wuc3RhcnQ9M0RyLmdldCgic3RhcnRD b2wiKS0xO3RoaXMuY29sLmVuZD0zRHIuZ2V0PQooImVuZENvbCIpLTF9ZWxzZXtjb25zb2xlLmxv ZygiVGFidWxhckJ1dHRvblRyYWNrc3RlciA6IEJlZC1maWxlIG1ldGFkYXRhIGk9Cm5jb21wbGV0 ZS4iKTtyZXR1cm59fWlmKHRoaXMuZmlsZV9leHQ9M0Q9M0QidmNmIil7ZnVuY3Rpb24gcSh1LHYp e2Zvcih2YXIgdD0KPTNEMDt0PHYubGVuZ3RoO3QrKyl7aWYodlt0XS5tYXRjaCh1KSl7cmV0dXJu IHR9fXJldHVybiAtMX10aGlzLmNvbC5jaHJvbT0KPTNEcSgiQ2hyb20iLHIuZ2V0KCJjb2x1bW5f bmFtZXMiKSk7dGhpcy5jb2wuc3RhcnQ9M0RxKCJQb3MiLHIuZ2V0KCJjb2x1bW5fPQpuYW1lcyIp KTt0aGlzLmNvbC5lbmQ9M0RudWxsO2lmKHRoaXMuY29sLmNocm9tPTNEPTNELTF8fHRoaXMuY29s LnN0YXJ0PTNEPQo9M0QtMSl7Y29uc29sZS5sb2coIlRhYnVsYXJCdXR0b25UcmFja3N0ZXIgOiBW Q0YtZmlsZSBtZXRhZGF0YSBpbmNvbXBsZXRlLiI9Cik7cmV0dXJufX1pZih0aGlzLmNvbC5jaHJv bT0zRD0zRD0zRHVuZGVmaW5lZCl7cmV0dXJufWlmKG8uaWQpe3RoaXMuZGF0YXNldD0KX2lkPTNE by5pZH1lbHNle2NvbnNvbGUubG9nKCJUYWJ1bGFyQnV0dG9uVHJhY2tzdGVyIDogRGF0YXNldCBp ZGVudGlmaWNhdGlvPQpuIGlzIG1pc3NpbmcuIik7cmV0dXJufWlmKG8uZ2V0KCJ1cmxfdml6Iikp e3RoaXMudXJsX3Zpej0zRG8uZ2V0KCJ1cmxfdml6Iik9Cn1lbHNle2NvbnNvbGUubG9nKCJUYWJ1 bGFyQnV0dG9uVHJhY2tzdGVyIDogVXJsIGZvciB2aXN1YWxpemF0aW9uIGNvbnRyb2xsZT0KciBp cyBtaXNzaW5nLiIpO3JldHVybn1pZihvLmdldCgiZ2Vub21lX2J1aWxkIikpe3RoaXMuZ2Vub21l X2J1aWxkPTNEby5nZXQoPQoiZ2Vub21lX2J1aWxkIil9dmFyIG49M0RuZXcgZi5JY29uQnV0dG9u Vmlldyh7bW9kZWw6bmV3IGYuSWNvbkJ1dHRvbih7dGl0bGU9CjoiVmlzdWFsaXplIixpY29uX2Ns YXNzOiJjaGFydF9jdXJ2ZSIsaWQ6ImJ0bl92aXoifSl9KTt0aGlzLnNldEVsZW1lbnQocC4kZT0K bCk7dGhpcy4kZWwuYXBwZW5kKG4ucmVuZGVyKCkuJGVsKTt0aGlzLmhpZGUoKX0sZXZlbnRzOnsi bW91c2VvdmVyIHRyIjoic2hvPQp3Iixtb3VzZWxlYXZlOiJoaWRlIn0sc2hvdzpmdW5jdGlvbihz KXtmdW5jdGlvbiByKHgpe3JldHVybiAhaXNOYU4ocGFyc2VGbG89CmF0KHgpKSYmaXNGaW5pdGUo eCl9aWYodGhpcy5jb2wuY2hyb209M0Q9M0Q9M0RudWxsKXtyZXR1cm59dmFyIHc9M0QkKHMudGFy Zz0KZXQpLnBhcmVudCgpO3ZhciB0PTNEdy5jaGlsZHJlbigpLmVxKHRoaXMuY29sLmNocm9tKS5o dG1sKCk7dmFyIG49M0R3LmNoaWxkPQpyZW4oKS5lcSh0aGlzLmNvbC5zdGFydCkuaHRtbCgpO3Zh ciBwPTNEdGhpcy5jb2wuZW5kP3cuY2hpbGRyZW4oKS5lcSh0aGlzLmM9Cm9sLmVuZCkuaHRtbCgp Om47aWYoIXQubWF0Y2goIl4jIikmJnQhPTNEPTNEIiImJnIobikpe3ZhciB2PTNEe2RhdGFzZXRf aWQ6dD0KaGlzLmRhdGFzZXRfaWQsZ2VuZV9yZWdpb246dCsiOiIrbisiLSIrcH07dmFyIHE9M0R3 Lm9mZnNldCgpO3ZhciBvPTNEcS5sZWZ0PQotMTA7dmFyIHU9M0RxLnRvcC0kKHdpbmRvdykuc2Ny b2xsVG9wKCkrMzskKCIjYnRuX3ZpeiIpLmNzcyh7cG9zaXRpb246ImZpeGU9CmQiLHRvcDp1KyJw eCIsbGVmdDpvKyJweCJ9KTskKCIjYnRuX3ZpeiIpLm9mZigiY2xpY2siKTskKCIjYnRuX3ZpeiIp LmNsaWNrKD0KdGhpcy5jcmVhdGVfdHJhY2tzdGVyX2FjdGlvbih0aGlzLnVybF92aXosdix0aGlz Lmdlbm9tZV9idWlsZCkpOyQoIiNidG5fdml6PQoiKS5zaG93KCl9ZWxzZXskKCIjYnRuX3ZpeiIp LmhpZGUoKX19LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC5maW5kKCIjYnRuX3Y9Cml6IikuaGlk ZSgpfSxjcmVhdGVfdHJhY2tzdGVyX2FjdGlvbjpmdW5jdGlvbihuLHEscCl7dmFyIG89M0R0aGlz O3JldHVybiBmdT0KbmN0aW9uKCl7dmFyIHI9M0R7fTtpZihwKXtyWyJmLWRia2V5Il09M0RwfSQu YWpheCh7dXJsOm4rIi9saXN0X3RyYWNrcz8iKyQuPQpwYXJhbShyKSxkYXRhVHlwZToiaHRtbCIs ZXJyb3I6ZnVuY3Rpb24oKXtvLm1vZGFsLnNob3coe3RpdGxlOiJTb21ldGhpbmcgd2U9Cm50IHdy b25nISIsYm9keToiVW5mb3J0dW5hdGVseSB3ZSBjb3VsZCBub3QgYWRkIHRoaXMgZGF0YXNldCB0 byB0aGUgdHJhY2sgYj0Kcm93c2VyLiBQbGVhc2UgdHJ5IGFnYWluIG9yIGNvbnRhY3QgdXMuIixi dXR0b25zOntDYW5jZWw6ZnVuY3Rpb24oKXtvLm1vZGFsPQouaGlkZSgpfX19KX0sc3VjY2Vzczpm dW5jdGlvbihzKXtvLm1vZGFsLnNob3coe3RpdGxlOiJWaWV3IERhdGEgaW4gYSBOZXcgb3I9CiBT YXZlZCBWaXN1YWxpemF0aW9uIixidXR0b25zOntDYW5jZWw6ZnVuY3Rpb24oKXtvLm1vZGFsLmhp ZGUoKX0sIlZpZXcgaW4gcz0KYXZlZCB2aXN1YWxpemF0aW9uIjpmdW5jdGlvbigpe28ubW9kYWwu c2hvdyh7dGl0bGU6IkFkZCBEYXRhIHRvIFNhdmVkIFZpc3VhPQpsaXphdGlvbiIsYm9keTpzLGJ1 dHRvbnM6e0NhbmNlbDpmdW5jdGlvbigpe28ubW9kYWwuaGlkZSgpfSwiQWRkIHRvIHZpc3VhbGk9 CnphdGlvbiI6ZnVuY3Rpb24oKXtvLm1vZGFsLmhpZGUoKTtvLm1vZGFsLiRlbC5maW5kKCJpbnB1 dFtuYW1lPTNEaWRdOmNoZWNrZT0KZCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0zRCQodGhpcyku dmFsKCk7cS5pZD0zRHQ7by5mcmFtZS5hZGQoe3RpdGxlOiJUcmFjPQprc3RlciIsdHlwZToidXJs Iixjb250ZW50Om4rIi90cmFja3N0ZXI/IiskLnBhcmFtKHEpfSl9KX19fSl9LCJWaWV3IGluIG5l dyA9CnZpc3VhbGl6YXRpb24iOmZ1bmN0aW9uKCl7by5tb2RhbC5oaWRlKCk7by5mcmFtZS5hZGQo e3RpdGxlOiJUcmFja3N0ZXIiLHR5cD0KZToidXJsIixjb250ZW50Om4rIi90cmFja3N0ZXI/Iisk LnBhcmFtKHEpfSl9fX0pfX0pO3JldHVybiBmYWxzZX19fSk7dmFyIGw9Cj0zRGZ1bmN0aW9uKHEs byxyLG4pe3ZhciBwPTNEbmV3IG8oe21vZGVsOm5ldyBxKHIpfSk7cC5yZW5kZXIoKTtpZihuKXtu LmFwcD0KZW5kKHAuJGVsKX1yZXR1cm4gcH07dmFyIGM9M0RmdW5jdGlvbihwKXtpZighcC5tb2Rl bCl7cC5tb2RlbD0zRG5ldyBpKHAuZGF0PQphc2V0X2NvbmZpZyl9dmFyIG89M0RwLnBhcmVudF9l bHQ7dmFyIHE9M0RwLmVtYmVkZGVkO2RlbGV0ZSBwLmVtYmVkZGVkO2RlbGU9CnRlIHAucGFyZW50 X2VsdDtkZWxldGUgcC5kYXRhc2V0X2NvbmZpZzt2YXIgbj0zRChxP25ldyBtKHApOm5ldyBnKHAp KTtuLnJlbj0KZGVyKCk7aWYobyl7by5hcHBlbmQobi4kZWwpO24uZXhwYW5kX3RvX2NvbnRhaW5l cigpfXJldHVybiBufTtyZXR1cm57RGF0YXNlPQp0OmIsVGFidWxhckRhdGFzZXQ6aSxEYXRhc2V0 Q29sbGVjdGlvbjplLFRhYnVsYXJEYXRhc2V0Q2h1bmtlZFZpZXc6YSxjcmVhdGU9ClRhYnVsYXJE YXRhc2V0Q2h1bmtlZFZpZXc6Y319KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZm IC1yIDhlYzY5MDUyNjAwYTJjOTE1Zjg4ZDMxODU4ODRhMTg1ZTgyMDg2ZDEgLXIgMzY0NTdjYzFl YzI2YzQ0MGU3YTk5NmM9CmU1MWViODdlZDdjNThjYzRkIHN0YXRpYy9zdHlsZS9ibHVlL2Jhc2Uu Y3NzCi0tLSBhL3N0YXRpYy9zdHlsZS9ibHVlL2Jhc2UuY3NzCisrKyBiL3N0YXRpYy9zdHlsZS9i bHVlL2Jhc2UuY3NzCkBAIC0yMjM0LDYgKzIyMzQsOCBAQAogI2xvYWRpbmdfaW5kaWNhdG9ye3Bv c2l0aW9uOmZpeGVkO3JpZ2h0OjEwcHg7dG9wOjEwcHg7aGVpZ2h0OjMycHg7d2lkdGg6MzI9CnB4 O2Rpc3BsYXk6bm9uZTtiYWNrZ3JvdW5kOnVybChsYXJnZXNwaW5uZXIuZ2lmKX0KICNjb250ZW50 X3RhYmxlIHRke3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmc6MnB4 IDEwcHh9CiAjY29udGVudF90YWJsZSB0ZC5zdHJpbmdhbGlnbnt0ZXh0LWFsaWduOmxlZnR9Cisj Y29udGVudF90YWJsZSAuZGFya19yb3d7YmFja2dyb3VuZC1jb2xvcjojREREfQorI2NvbnRlbnRf dGFibGUgdGh7YmFja2dyb3VuZC1jb2xvcjojQUFBfQogLnRvb2xNZW51QW5kVmlldyAudG9vbEZv cm17ZmxvYXQ6bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO21hcmdpbjoxMHB4fQogLnRleHQt YW5kLWF1dG9jb21wbGV0ZS1zZWxlY3R7YmFja2dyb3VuZDpub25lO3Bvc2l0aW9uOnJlbGF0aXZl O3BhZGRpbmctcmk9CmdodDoxOHB4fS50ZXh0LWFuZC1hdXRvY29tcGxldGUtc2VsZWN0OmFmdGVy e21hcmdpbi10b3A6NnB4O3Bvc2l0aW9uOmFic29sdT0KdGU7dG9wOjJweDtyaWdodDo2cHg7d2lk dGg6MTBweDtoZWlnaHQ6MTBweDtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlPQppZ2h0 OjA7bWFyZ2luLWxlZnQ6MnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXItdG9wOjRweCBz b2xpZCAjMDAwO2JvcmQ9CmVyLXJpZ2h0OjRweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVm dDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdD0KdG9tOjAgZG90dGVkO2NvbnRlbnQ6 IiI7ZmlsdGVyOmFscGhhKG9wYWNpdHk9M0Q4MDAwKTtvcGFjaXR5OjgwOy1tcy1maWx0ZXI6PQpw cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT0zRDgwMDApO2Zp bHRlcjphbHBoYShvcGFjaXQ9Cnk9M0Q4MDAwKX0uYnRuLWRlZmF1bHQgLnRleHQtYW5kLWF1dG9j b21wbGV0ZS1zZWxlY3Q6YWZ0ZXJ7Ym9yZGVyLXRvcC1jb2xvcj0KOiMzMzN9CiAuYnRuLXByaW1h cnkgLnRleHQtYW5kLWF1dG9jb21wbGV0ZS1zZWxlY3Q6YWZ0ZXIsLmJ0bi1zdWNjZXNzIC50ZXh0 LWFuZC1hdT0KdG9jb21wbGV0ZS1zZWxlY3Q6YWZ0ZXIsLmJ0bi13YXJuaW5nIC50ZXh0LWFuZC1h dXRvY29tcGxldGUtc2VsZWN0OmFmdGVyLC5iPQp0bi1kYW5nZXIgLnRleHQtYW5kLWF1dG9jb21w bGV0ZS1zZWxlY3Q6YWZ0ZXIsLmJ0bi1pbmZvIC50ZXh0LWFuZC1hdXRvY29tcGw9CmV0ZS1zZWxl Y3Q6YWZ0ZXJ7Ym9yZGVyLXRvcC1jb2xvcjojZmZmfQoKZGlmZiAtciA4ZWM2OTA1MjYwMGEyYzkx NWY4OGQzMTg1ODg0YTE4NWU4MjA4NmQxIC1yIDM2NDU3Y2MxZWMyNmM0NDBlN2E5OTZjPQplNTFl Yjg3ZWQ3YzU4Y2M0ZCBzdGF0aWMvc3R5bGUvc3JjL2xlc3MvYmFzZS5sZXNzCi0tLSBhL3N0YXRp Yy9zdHlsZS9zcmMvbGVzcy9iYXNlLmxlc3MKKysrIGIvc3RhdGljL3N0eWxlL3NyYy9sZXNzL2Jh c2UubGVzcwpAQCAtMTU1Myw2ICsxNTUzLDE0IEBACiAgICAgdGV4dC1hbGlnbjpsZWZ0OwogfQo9 MjAKKyNjb250ZW50X3RhYmxlIC5kYXJrX3Jvd3sKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERE OworfQorCisjY29udGVudF90YWJsZSB0aHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQUFBOwor fQorCiAvLyA9M0Q9M0Q9M0Q9M0QgSW50ZWdyYXRlZCB0b29sIGZvcm0gc3R5bGVzCj0yMAogLnRv b2xNZW51QW5kVmlldyAudG9vbEZvcm0KClJlcG9zaXRvcnkgVVJMOiBodHRwczovL2JpdGJ1Y2tl dC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsLwoKLS0KClRoaXMgaXMgYSBjb21taXQgbm90aWZp Y2F0aW9uIGZyb20gYml0YnVja2V0Lm9yZy4gWW91IGFyZSByZWNlaXZpbmcKdGhpcyBiZWNhdXNl IHlvdSBoYXZlIHRoZSBzZXJ2aWNlIGVuYWJsZWQsIGFkZHJlc3NpbmcgdGhlIHJlY2lwaWVudCBv Zgp0aGlzIGVtYWlsLgo